2012-10-05 101 views
3

我想在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文件,其中包含Popenstartfile

我期待最後的工作......我想是我的最後手段,如果我不能直接獲取Python腳本。

感謝您的任何意見和建議!

+0

你想要的Python腳本執行完畢後,每個控制檯保持開放? – martineau

回答

6

您可以使用:

import os 
os.system("start python perf_test.py 5") 
+1

太簡單了...以及我正在尋找的東西。我發誓我也嘗試了很多'os.system()'變種。謝謝! –

0

代碼:

user = raw_input("welcome to cmd: ") 
def print_perms(chars, minlen, maxlen): 
    for n in range(minlen, maxlen+1): 
     for perm in itertools.product(chars, repeat=n): 
      print(''.join(perm)) 
+1

爲什麼OP應該使用你的代碼?請給出更詳細的答案 – Zippy