pyc runtime error

B

Baris CUHADAR

Can anyone explain this unexpected behavior?
all files chmod 755, i've compiled x.py with py_compilefiles,
also tried within python console with "import x"

system: centos 5.4 32bit

This a PATH related problem i think?


[root@centos-14 cgi-bin]# ./x.pyc
: command not found
../x.pyc: line 2: syntax error near unexpected token `)'
../x.pyc: line 2: `��)Lc@sdGHdGHdkZeiGHdS(sContent-Type:text/
html'


[root@centos-14 cgi-bin]# python x.pyc
Content-Type:text/html


python
2.4.3 (#1, Sep 3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]

--------------------------------------------------------------------------------------------

x.py file content:

#!/usr/bin/env python

print "Content-Type:text/html\n\n"
print "python"
import sys
print sys.version

--------------------------------------------------------------------------------------------
 
C

Chris Rebert

Can anyone explain this unexpected behavior?
all files chmod 755, i've compiled x.py with py_compilefiles,
also tried within python console with "import x"

system:  centos 5.4 32bit

This a PATH related problem i think?
Nope.

[root@centos-14 cgi-bin]# ./x.pyc

..pyc files are just bytecode, not scripts, so you can't run them as
scripts/executables under *nix. Run the .py file instead. Or do
`python x.pyc` like you showed.

Cheers,
Chris
 
R

Rami Chowdhury

Can anyone explain this unexpected behavior?

I'm sorry -- can you let us know what behavior you're expecting?
all files chmod 755, i've compiled x.py with py_compilefiles,
also tried within python console with "import x"

system: centos 5.4 32bit

This a PATH related problem i think?

Perhaps I'm misunderstanding what you're trying to do but from what I can
see, you are expecting .pyc files to be directly executed by the shell. And
as I understand them, they are *not* meant to be directly executed by the
shell at all -- they're simply a sometimes-useful shortcut for the Python
interpreter.

Python scripts like your x.py, however, *are* meant to be executed by the
shell. Have you tried:

[user@box cgi-bin]$ ./x.py

?
[root@centos-14 cgi-bin]# ./x.pyc

May I ask, as well, why you're doing all of this as root?
[root@centos-14 cgi-bin]# python x.pyc
Content-Type:text/html


python
2.4.3 (#1, Sep 3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]

--------------------------------------------------------------------------------------------

x.py file content:

#!/usr/bin/env python

print "Content-Type:text/html\n\n"
print "python"
import sys
print sys.version
 
B

Baris CUHADAR

Can anyone explain this unexpected behavior?

I'm sorry -- can you let us know what behavior you're expecting?
all files chmod 755, i've compiled x.py with py_compilefiles,
also tried within python console with "import x"
system:  centos 5.4 32bit
This a PATH related problem i think?

Perhaps I'm misunderstanding what you're trying to do but from what I can
see, you are expecting .pyc files to be directly executed by the shell. And
as I understand them, they are *not* meant to be directly executed by the
shell at all -- they're simply a sometimes-useful shortcut for the Python
interpreter.

Python scripts like your x.py, however, *are* meant to be executed by the
shell. Have you tried:

[user@box cgi-bin]$ ./x.py

?
[root@centos-14 cgi-bin]# ./x.pyc

May I ask, as well, why you're doing all of this as root?


[root@centos-14 cgi-bin]# python x.pyc
Content-Type:text/html
python
2.4.3 (#1, Sep  3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)]
--------------------------------------------------------------------------------------------

x.py file content:
#!/usr/bin/env python
print "Content-Type:text/html\n\n"
print "python"
import sys
print sys.version

Thank you for your replies.
This machine is a local virtual test machine so security issues are
omitted.

Actually i wrote some scripts in python that are working as gateway
controlling scripts iptables/tc/squid-proxy, and i want to execute
them as cgi. Protection of source code is also important. These
scripts works fine with ubuntu 9.10 and ubuntu 10.04, trying to
eleminate this execution error and successfully port them to centos
5.4. Or i have to rewrite these scripts in C which is time comsuming.

On centos 5.4, i think httpd tries to execute it as i did "./x.pyc".
 
B

Baris CUHADAR

It looks like you have the binfmt kernel feature installed and
configured on your Ubuntu machines. Do you have some Python related
files in /proc/sys/fs/binfmt_misc/ ?

Christian

Thanks Christian, before your message i was thinking about writing
wrapper to turn round this issue.

my wrapper:
#!/usr/bin/bash

/usr/bin/python m_file.pyc

Yes /proc/sys/fs/binfmt_misc/python2.6 is there.

enabled
interpreter /usr/bin/python2.6
flags:
offset 0
magic d1f20d0a

How can make it possible in centos? With custom kernel compiling?
 
B

Baris CUHADAR

Thanks Christian, before your message i was thinking about writing
wrapper to turn round this issue.

my wrapper:
#!/usr/bin/bash

/usr/bin/python m_file.pyc

Yes /proc/sys/fs/binfmt_misc/python2.6 is there.

enabled
interpreter /usr/bin/python2.6
flags:
offset 0
magic d1f20d0a

How can make it possible in centos? With custom kernel compiling?

According to this documentation below, i've solved my problem.

http://git.kernel.org/gitweb.cgi?p=...=blob;f=Documentation/binfmt_misc.txt;hb=HEAD

registered .pyc extension to invoke python interpreter.

Done, thank you everybody, especially Christian..
 
B

Baris CUHADAR

The binfmt_misc module has to be loaded, which is presumably is, if
/proc/sys/fs/binfmt_misc exists (not 100% sure on that)
It's almost certainly provided by CentOS, even if it's not loaded by
default.

Assuming file.pyc was actually compiled by python2.6, and not some other
version, it should work.

-- Thomas

Yes centos5.4 loads it automatically, however little kickstart script
in "/etc/rc.local" is required.

is_python=$(ls -l /proc/sys/fs/binfmt_misc/python2.4 | wc -l)

if [ $is_python -lt 1 ];
then
echo ':python2.4:E::pyc::/usr/bin/python:' > /proc/sys/fs/binfmt_misc/
register
fi

i'm still digging in..
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top