【发布时间】:2016-11-08 22:16:45
【问题描述】:
我有一个需要在服务器上运行 bash 命令的 python 程序。当我像这样在本地目录中运行 bash 命令时,该程序可以工作:
import subprocess
from subprocess import call
call(['bash', 'Script_Test.sh'])
但是,在通过 SSH 连接到服务器并运行下面类似的代码行并在服务器上使用 bash 脚本的路径后,我收到错误“没有这样的文件或目录”
call['bash', path]
由于多种原因,这没有意义。我三次检查路径是否正确。我继续使用 Putty,连接到那里的服务器,并使用相同的路径运行 bash 命令并且它有效,所以它不能是路径。我还进行了许多测试,以确保我通过 SSH 连接到正确的服务器,并且确实如此。我认为在我运行 bash 时服务器上存在安全问题,所以我尝试使用 cat 代替。不行,还是找不到路径。
我对 python 子进程不是很熟悉,所以任何指向我在这里缺少的“调用”的指针都会非常有帮助。
【问题讨论】:
-
将行
import os.path; print (os.path.isfile(path))添加到您的 python 代码中。如果您的程序返回 False,则表示文件:path不存在。因此,您需要将 bash 脚本文件重新定位到其正确位置。此外,使用which bash和which python测试您的服务器上是否安装了bash 和python。 -
您可能会从运行 Script_Test.sh 的子进程中收到错误“没有这样的文件或目录”。这可能与您的子进程的路径可能与您的 script_test.sh 所在的位置不同有关。您可以使用
pwd从内部打印来检查子进程的路径。
标签: python bash shell ssh subprocess