具有可执行权限的Python脚本显示“找不到命令”

时间:2019-03-15 20:40:35

标签: python shell executable tcsh

我有一个python脚本abc.py。在外壳脚本文件中,我将其称为./abc.py

在abc.py顶部,我有#!/usr/bin/python

test -x abc.py && echo true || echo false返回true

执行shell脚本时,它显示./abc.py: Command not found.

如果我将其称为python ./abc.py而不是./abc.py

问题只与我今天创建的abc.py文件有关。同一目录中目的和名称不同的旧python脚本可以正常工作。

我已引用文件BTW的正确路径。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

tcsh中,当解释器无效时会发生这种情况:

$ cat foo
#!/invalid

$ tcsh -c './foo'
./foo: Command not found.

$ bash -c './foo'
bash: ./foo: /invalid: bad interpreter: No such file or directory

这可能有几个原因。也许您的系统路径错误:

% type python
python is /usr/local/bin/python

在这种情况下,脚本需要以#!/usr/local/bin/python开头。

或者,脚本可能具有Windows行尾(回车):

$ cat -v foo
#!/usr/bin/python^M
...^M

在这种情况下,请保存为Unix行尾。

答案 1 :(得分:0)

尝试如下复制您的设置:

  1. 文件:asdf.py

    #!/usr/bin/python
    print("Hello World")
    
  2. 文件:asdf.sh

    #!/bin/bash
    if [ -x asdf.py ]; then ./asdf.py ; else echo "Arrrrgh. File does not exist or does not have executable permisions"; fi
    
  3. 现在我将文件保存在同一目录中,例如在桌面上,使其可执行并在终端上运行shell脚本。

    usr@cmptr $ chmod +x asdf.{py,sh}
    usr@cmptr $ ls -la asdf.{py,sh}
    -rwxr-xr-x 1 usr usr 613 Mar 15 22:22 asdf.py
    -rwxr-xr-x 1 usr usr  56 Mar 15 22:14 asdf.sh
    usr@cmptr $ ./asdf.sh
    Hello World
    

现在,也许我误解了您的设置,但这应该可以正常工作。