我想在Windows上使用Python 2.6啓動幾個單獨的命令窗口,每個命令窗口都運行它們自己的Python腳本。目的是:這些是客戶端,我試圖用來自多個準獨立客戶端的請求加載服務器。如何從Python啓動命令窗口
我不需要在運行期間或運行後與客戶端通信,但我確實需要發送每個不同的commmandline arg,並且我希望每個客戶端的輸出能夠在自己的「控制檯」中滾動。
從DOS命令行,「開始」命令做我想做的。我可以:
start perf_test.py 2
或
start cmd /c perf_test.py 3
或
start cmd /c python perf_test.py 4
(這會爲你工作,如果你有正確的 「文件關聯」 設置爲* .py文件有。是其他線程,如果你需要幫助,或者使用python exe和/或腳本的完整路徑)。
My ch allenge是:我如何從Python獲得相同的效果?
使用subprocess
庫,我已經試過的變化是這樣的:
from subprocess import *
p = Popen(["perf_test.py", "4"], shell=True, stdin=PIPE)
但即使shell=True
,輸出在我已經在運行窗口中添加混合停止stdout=PIPE
的是,後來我必須閱讀p.stdout
或使用p.communicate()
。添加「CMD」到POPEN得到大致相同的:
p = Popen(["cmd", "/c", "perf_test.py", "4"], shell=True, stdin=PIPE)
以上都不是達到我期待的效果,這就是:「彈出打開一個新的,不同的窗口,這個劇本,以及手錶它的輸出在自己的控制檯中滾動「(因爲我真的想並行運行N個這樣的客戶端)。
另一件事我轉向差不多作品也。
import os
os.startfile("perf_test.py")
這會立即返回,並彈出一個實際的dosbox。好極了!成功!也就是說,直到我嘗試添加一個參數。這種失敗:
os.startfile("perf_test.py 5")
錯誤「系統找不到指定的文件」 ......因爲它添加「[SPACE] 5」文件名。 (這個參數的目的是每個「perf_test」都需要一個分配的ID,以便它們作爲不同的實例來訪問服務器。)
我考慮過的其他方法,以及由於各種原因而不太喜歡的方法:
- 在其自己的線程中運行每個「perf_test」。 (但是我真的很想在自己的控制檯中看到每個輸出。)
- 用Tk製作我自己的僞控制檯。 (圖1我只是遇到了不同的線程問題。)
- 動態地使用「啓動perf_test.py 1」,「啓動perf_test.py 2」等行的方式動態寫入.BAT文件,然後啓動該.BAT文件,其中包含
Popen
或startfile
。
我期待最後的工作......我想是我的最後手段,如果我不能直接獲取Python腳本。
感謝您的任何意見和建議!
你想要的Python腳本執行完畢後,每個控制檯保持開放? – martineau