import:使用python 3.5找不到命令

时间:2016-06-03 00:12:13

标签: python linux python-3.x centos

我正在寻找一些解决以下奇怪问题的线索或解决方案。

[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

5 个答案:

答案 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.

如果这不起作用,请告诉我。