簡體   English   中英

我們可以在python啟動的同一命令提示符中執行多個命令嗎

[英]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中執行所有命令(場景),因為我想將其最小化並將系統用於其他任務。

在每個迭代中,有兩個主要步驟:

  1. os.chdir(PATH)
  2. 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在不同主機上執行多個命令-我認為它可以用於同一主機上的不同路徑。

面料的網址:
http://docs.fabfile.org/en/1.3.3/index.html

同時為每個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.

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