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

Executing a program located in another directory in Python

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

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

但问题是使用 subprocess.call('cd /home/bin').

实际上并没有改变目录

我该如何解决这个问题?

您可以使用 os 更改目录。 python 脚本将保留在其创建的文件夹中,但 运行 将根据新目录进行处理。

import os

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

尝试

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

如果你的程序不是.py,那么就

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

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

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

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

import subprocess
subprocess.call('cd /home/bin; ./Upgrade', shell=True)

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

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

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

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

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

您可能还想使用 subprocess.check_call 函数(如果您想在子进程没有 return 零 return 代码时引发异常)。

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

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