运行 来自 Python 脚本的脚本
Running a script from within a Python script
我正在尝试从另一个 python 脚本 运行 一个位于我服务器文件夹中的 python 脚本。我尝试 运行 的脚本位置与现有脚本不在同一位置。我试图执行的脚本不是一个函数,我只需要它在第一个脚本完成后启动,而且我知道它们彼此独立工作。我找到了 similar post,但是当我使用 os.system
或 subprocess.Popen
时,我得到了错误 Not Found
。
我知道我调用的目录是正确的,因为在前面的语句中我调用了 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)
对于执行与其位置相关的操作的脚本,您需要首先获取您正在使用的当前目录 originalDir = os.path.dirname(full_path)
。接下来您将要使用 os.chdir('/home/xxx/xxxx/xxx/xx/')
,然后执行 subprocess.Popen("python test.py", shell=True)
到 运行 脚本。然后执行 os.chdir(originalDir)
返回到您曾经所在的目录。
您可以尝试这样的操作:
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)
将运行脚本作为其目录中的子进程,使用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
).
我正在尝试从另一个 python 脚本 运行 一个位于我服务器文件夹中的 python 脚本。我尝试 运行 的脚本位置与现有脚本不在同一位置。我试图执行的脚本不是一个函数,我只需要它在第一个脚本完成后启动,而且我知道它们彼此独立工作。我找到了 similar post,但是当我使用 os.system
或 subprocess.Popen
时,我得到了错误 Not Found
。
我知道我调用的目录是正确的,因为在前面的语句中我调用了 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)
对于执行与其位置相关的操作的脚本,您需要首先获取您正在使用的当前目录 originalDir = os.path.dirname(full_path)
。接下来您将要使用 os.chdir('/home/xxx/xxxx/xxx/xx/')
,然后执行 subprocess.Popen("python test.py", shell=True)
到 运行 脚本。然后执行 os.chdir(originalDir)
返回到您曾经所在的目录。
您可以尝试这样的操作:
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)
将运行脚本作为其目录中的子进程,使用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
).