[英]Can we execute multiple commands in the same command prompt launched by python
有一個Excel文件,其中包含多個方案的路徑。 我在for循環中使用os.system(command)
。 在每次迭代中,都會從excel文件中讀取路徑,並為該路徑執行場景。
我的問題是,每次使用os.system()
,CMD就會打開,執行一個命令並關閉。 在下一次迭代中,再次讀取第二條路徑並執行它,然后CMD關閉。 在此,CMD會一次又一次彈出。 在此期間,系統處於繁忙狀態,無法執行其他任務。 我想在一個CMD中執行所有命令(場景),因為我想將其最小化並將系統用於其他任務。
在每個迭代中,有兩個主要步驟:
os.chdir(PATH)
os.system(path of exe+" "+name of config file that is present at PATH")
可以通過使用子過程來完成。 如果可以,請舉個例子說明如何實現?
如果要使用子流程模塊,請嘗試以下操作:
from subprocess import call
import os.path
def call_scenario(path, config_file):
retcode = call(["path/of/exe", os.path.join(path,config_file)])
if retcode != 0:
print "Something bad happened : %s"%retcode
使用subprocess.call時 , shell=False
參數將避免啟動cmd來執行某些操作。
可以做到的-這是使用多處理的快速示例(Python 2.6或更高版本)
下面的示例使用Unix命令(“ ls”)和unixes路徑(“ / usr等...),但僅將它們替換為所需的命令和路徑。
from multiprocessing import Process
import os
paths = ["/tmp", "/usr", "/usr/include"]
def exec_(path):
p = Process()
p.run = lambda: os.system("ls %s" % path)
p.start()
for path in paths:
exec_(path)
如果您需要對運行的內容,返回代碼等進行一些復雜的控制,另一種選擇是利用Fabric項目-盡管它旨在使用ssh在不同主機上執行多個命令-我認為它可以用於同一主機上的不同路徑。
要同時為每個path
所有config.ini
運行c:\\path\\to\\exe
,並在執行之前將當前目錄更改為cwd
:
from subprocess import Popen
processes = [Popen([r"c:\path\to\exe", "config.ini"], cwd=path) for path in paths]
for p in processes: p.wait()
如果您不想並行運行所有命令,請使用subprocess.call()
,其參數與subprocess.Popen()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.