在Python中执行位于另一个目录中的程序

时间:2015-07-20 07:31:01

标签: python subprocess

我需要执行一个程序,该程序位于执行程序的python脚本位置之外的另一个目录中。 例如,如果我的python脚本位于/ home / Desktop并且我的程序'Upgrade'位于/ home / bin中,我将如何使用python脚本执行它?我这样试过:

import subporcess
subprocess.call('cd /home/bin')
subprocess.call('./Upgrade')

但问题是使用subprocess.call('cd / home / bin')实际上并未更改目录。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

子进程模块支持为子进程设置当前工作目录fx:

subprocess.call("./Upgrade", cwd="/home/bin")

如果您不关心子流程的当前工作目录,您当然可以提供可执行文件的完全限定名称:

subprocess.call("/home/bin/Upgrade")

您可能还想使用subprocess.check_call函数(如果您希望在子进程未返回零返回代码时引发异常)。

您的解决方案的问题在于您启动了一个子进程,您尝试执行“cd / home / bin”然后启动另一个子进程,您尝试执行“./Upgrade” - 当前工作目录以后不受前者目录更改的影响。

请注意,为call方法提供shell有一些缺点(也有优点)。缺点(或优点)是你将获得各种shell扩展(通配符等)。一个缺点可能是shell可能会根据您的平台不同地解释命令。

答案 1 :(得分:1)

您可以使用操作系统更改目录。 python脚本将保留在它创建的文件夹中,但将根据新目录运行进程。

import os

os.chdir()
os.chdir('filepath')

答案 2 :(得分:1)

另一种方法是加入两个命令。

Page_Load

这样您就不需要更改脚本运行目录了。

答案 3 :(得分:0)

尝试

import os
os.system('python /home/bin/Upgrade')

如果您的计划不是.py,那么只需

os.system('/home/bin/Upgrade')

os.system('cd /home/bin|./Upgrade')

答案 4 :(得分:0)

或者您可以查看python相对导入,具体取决于它的作用以及如何在Update dir中构建脚本