我需要执行一个位于除执行程序的python脚本位置以外的其他目录中的程序。例如,如果我的python脚本位于/ home / Desktop中,而我的程序“ Upgrade”位于/ home / bin中,我将如何使用python脚本执行它?我这样尝试过:
import subporcess
subprocess.call('cd /home/bin')
subprocess.call('./Upgrade')
但是问题是,实际上没有通过使用subprocess.call('cd / home / bin')来更改目录。
我该如何解决?
子流程模块支持为子流程设置当前工作目录,fx:
subprocess.call("./Upgrade", cwd="/home/bin")
如果您不关心子进程的当前工作目录,那么您当然可以提供可执行文件的完全限定名称:
subprocess.call("/home/bin/Upgrade")
您可能还想使用subprocess.check_call
函数(如果您想在子进程未返回零返回码的情况下引发异常,则为该函数。
解决方案的问题是,您启动一个子进程并尝试执行“ cd / home / bin”,然后启动另一个子进程,并尝试执行“ ./Upgrade”-后者的当前工作目录不受前者目录更改的影响。
请注意,将外壳提供给call
方法有一些缺点(也有优点)。缺点(或优点)是您将获得各种shell扩展(通配符等)。一个缺点可能是shell可能会根据您的平台对命令进行不同的解释。
您可以使用os更改目录。 python脚本将保留在其创建的文件夹中,但将基于新目录运行进程。
另一种选择是将两个命令结合在一起。
或者您可以查看python相对导入,具体取决于它的作用以及如何在更新目录中构建脚本
尝试