导入:在python3.5中找不到命令

2024-10-01 00:13:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一些线索或解决办法来解决下面这个奇怪的问题。在

[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

Tags: pyimportbuildbinlinuxsyssystemx86
3条回答

通过使用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脚本,因此出现错误。在

但是我认为不存在的文件会给出如下错误:

bad interpreter: No such file or directory

因此,我想知道您的错误是否比这更微妙,因为您的#!行指向您认为的其他地方,但它仍然指向一个有效的可执行文件。在

N.B.你可以做一个测试,但你的问题中没有出现的测试是运行

/build/toolchain/lin64/python-3.5.1/bin/python ./mytest.py

如果这和

^{pr2}$

那么您几乎肯定在#!行中出现了问题/打字错误。在

您的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的构建。在

相关问题 更多 >