我试图从另一个python脚本运行位于我服务器上的文件夹中的python脚本。我尝试运行的脚本的位置与现有脚本不在同一位置。我试图执行的脚本不是一个函数,我只需要在第一个完成后启动它,我知道它们彼此独立工作。我找到similar post,但在使用Not Found
或os.system
时收到错误subprocess.Popen
。
我知道我调用的目录是正确的,因为在前面的语句中我调用shutil.move
将文件移动到我想要运行的scipt所在的目录中。
这就是我的尝试:
subprocess.Popen("/home/xxx/xxxx/xxx/xx/test.py")
os.system("/home/xxx/xxxx/xxx/xx/test.py")
subprocess.Popen("/home/xxx/xxxx/xxx/xx/test.py", shell=True)
答案 0 :(得分:0)
对于执行与其位置相关的操作的脚本,您需要先使用originalDir = os.path.dirname(full_path)
获取当前目录。接下来,您将需要使用os.chdir('/home/xxx/xxxx/xxx/xx/')
,然后执行subprocess.Popen("python test.py", shell=True)
来运行脚本。然后执行os.chdir(originalDir)
以返回您曾经进入的目录。
答案 1 :(得分:0)
您可以尝试这样的事情:
original_dir = os.getcwd()
script_paths = ["/...path1.../script1.py", "/...path2.../script2.py", "/...path3.../script3.py"]
for script_path in script_paths:
base_path, script = os.path.split(script_path)
os.chdir(original_dir)
subprocess.Popen(script)
os.chdir(original_dir)
答案 2 :(得分:0)
要在其目录中将脚本作为子进程运行,请使用cwd
参数:
#!/usr/bin/env python
import os
import sys
from subprocess import check_call
script_path = "/home/xxx/xxxx/xxx/xx/test.py"
check_call([sys.executable or 'python', script_path],
cwd=os.path.dirname(script_path))
与基于os.chdir()
的解决方案的区别在于,只在子进程中调用chdir()
。父工作目录保持不变。
sys.executable
是一个执行父Python脚本的python可执行文件。如果test.py
拥有正确的shebang集并且该文件具有可执行权限,那么您可以直接运行它(使用[script_path]
而不使用 shell=True
)。