簡體   English   中英

從Python腳本中運行腳本

[英]Running a script from within a Python script

我試圖從另一個python腳本運行位於我的服務器上的文件夾中的python腳本。 我嘗試運行的腳本的位置與現有腳本不在同一位置。 我試圖執行的腳本不是一個函數,我只需要在第一個完成后啟動它,我知道它們彼此獨立工作。 我發現了一個類似的帖子 ,但我得到的錯誤Not Found ,當我用兩種os.systemsubprocess.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM