[英]Running a script from within a Python script
我試圖從另一個python腳本運行位於我的服務器上的文件夾中的python腳本。 我嘗試運行的腳本的位置與現有腳本不在同一位置。 我試圖執行的腳本不是一個函數,我只需要在第一個完成后啟動它,我知道它們彼此獨立工作。 我發現了一個類似的帖子 ,但我得到的錯誤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)
對於執行與其位置相關的操作的腳本,您將首先使用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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.