我正在寻找一些解决以下奇怪问题的线索或解决方案。
[sc-d02-087-017:~]$ cat mytest.py
#!/build/toolchain/lin64/python-3.5.1/bin/python
import platform, sys
print(platform.system())
sys.exit(0)
我试图将我的测试程序作为shell可执行文件运行,但shell没有认识到它的python程序必须由给定的/build/toolchain/lin64/python-3.5.1/bin/python解释,而是投掷错误。
[sc-d02-087-017:~]$ ./mytest.py
./mytest.py: line 2: import: command not found
./mytest.py: line 3: syntax error near unexpected token `platform.system'
./mytest.py: line 3: `print(platform.system())'
但是这可以通过python prompt和/或命令行
按预期工作[sc-d02-087-017:~]$ /build/toolchain/lin64/python-3.5.1/bin/python -c 'import platform, sys;print(platform.system());'
Linux
我的机器是基于64拱的
[sc-d02-087-017:~]$ uname -a
Linux sc-d02-087-017 2.6.18-308.8.1.el5 #1 SMP Tue May 29 14:57:25 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
根据评论中的要求:
[sc-d02-087-017:~]$ xxd mytest.py | head
0000000: 2321 2f62 7569 6c64 2f74 6f6f 6c63 6861 #!/build/toolcha
0000010: 696e 2f6c 696e 3634 2f70 7974 686f 6e2d in/lin64/python-
0000020: 332e 352e 312f 6269 6e2f 7079 7468 6f6e 3.5.1/bin/python
0000030: 332e 350a 696d 706f 7274 2070 6c61 7466 3.5.import platf
0000040: 6f72 6d2c 2073 7973 0a70 7269 6e74 2870 orm, sys.print(p
0000050: 6c61 7466 6f72 6d2e 7379 7374 656d 2829 latform.system()
0000060: 290a 7379 732e 6578 6974 2830 290a ).sys.exit(0).
[sc-d02-087-017:~]$ ls -l mytest.py
-rwxr-xr-x 1 mmopuru mts 110 Jun 2 17:23 mytest.py
答案 0 :(得分:2)
如您所知,错误消息是因为您的python脚本被直接解释为shell脚本。
通常,当你没有" shebang" line(!#/path/to/python/executable
)。由于这不适用,我看起来有点困难,并注意到您的xxd
输出与您的cat
输出不匹配。特别是 - 3.5
输出中会出现额外的xxd
。我相信你的shebang行是不正确的,实际上是#!/build/toolchain/lin64/python-3.5.1/bin/python3.5
,它可能指向一个你认为/不存在的文件。因此,您的文件被解释为shell脚本,因此您会看到错误。
然而 我希望不存在的文件会出现如下错误:
bad interpreter: No such file or directory
因此我想知道你的错误是否比那更微妙,因为你的#!
行指向你认为的其他地方,但它仍然指向一个有效的可执行文件。
N.B。 你可以做的测试,但你的问题中没有出现的测试是
/build/toolchain/lin64/python-3.5.1/bin/python ./mytest.py
如果与
相同/build/toolchain/lin64/python-3.5.1/bin/python -c 'import platform, sys;print(platform.system());'
然后你的#!
行几乎肯定有问题/拼写错误。
答案 1 :(得分:0)
通过使用UTF8(例如UTF16)的不同编码保存python 3文件,我得到了各种类似的问题,所以我怀疑这是你的问题。尝试确保使用"普通"保存它。编码(UTF8),也许这将解决它!
如果确实如此,我怀疑"问题"是python3对不同编码的文件有更好的支持... bash看起来不是: - )。
答案 2 :(得分:0)
您的系统的shebang行可能是too long。尝试缩短它。例如,创建一个符号链接到/build/toolchain/lin64/python-3.5.1
:
ln -s /build/toolchain/lin64/python-3.5.1 /tmp/xyz
并将shebang行更改为#!/tmp/xyz/bin/python
。如果这样可以解决问题,那么你可以选择一种更恰当的简短方式来引用你的python构建。
答案 3 :(得分:0)
尝试将该路径添加到您的配置文件/build/toolchain/lin64/python-3.5.1/bin/python&执行路径文件.bash_profile或取决于您使用的shell,然后切换用户到相同的登录或执行配置文件,如。 ./.bash_profile并尝试使用您的脚本agin ....希望它有所帮助
答案 4 :(得分:-1)
我不知道您为何使用./
。
执行这样的Python脚本:
python mytest.py # and then just hit enter.
如果这不起作用,请告诉我。