我正在寻找一些线索或解决办法来解决下面这个奇怪的问题。在
[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来解释,而是抛出错误。在
^{pr2}$但这和python提示符和/或命令行一样可以正常工作
[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
通过使用UTF8(例如UTF16)的不同编码保存python3文件,我会遇到许多类似的问题,因此我怀疑这就是您的问题。试着确保它是用“普通”编码(UTF8)保存的,也许这样可以修复它!在
如果是这样,我怀疑“问题”是python3对不同编码的文件有更好的支持。。。bash似乎没有:-)。在
如您所知,错误消息是因为您的python脚本被直接解释为shell脚本。在
通常在没有“shebang”行(
!#/path/to/python/executable
)时发生这种情况。因为这不适用,所以我仔细看了一下,发现您的xxd
输出与您的cat
输出不匹配。尤其是在xxd
输出中会出现一个额外的3.5
。我相信您的shebang行是不正确的,它实际上读取了#!/build/toolchain/lin64/python-3.5.1/bin/python3.5
,它可能指向的文件不是您认为/不存在的那个文件。因此,您的文件被解释为shell脚本,因此出现错误。在但是我认为不存在的文件会给出如下错误:
因此,我想知道您的错误是否比这更微妙,因为您的
#!
行指向您认为的其他地方,但它仍然指向一个有效的可执行文件。在N.B.你可以做一个测试,但你的问题中没有出现的测试是运行
如果这和
^{pr2}$那么您几乎肯定在
#!
行中出现了问题/打字错误。在您的shebang行可能是您的系统的too long。试着缩短它。例如,创建
/build/toolchain/lin64/python-3.5.1
的符号链接:并将shebang行改为
#!/tmp/xyz/bin/python
。如果这样可以解决问题,那么您可以选择一种更恰当的简短方式来引用python的构建。在相关问题 更多 >
编程相关推荐