2014-10-06 31 views
0

我最近從TortoiseHg 3.0.1更新到3.1.1。從Tortoise Hg 3.0升級到3.1 - Python子流程調用

這是打破自定義Python腳本,由於子流程調用而覆蓋GUI中的提交。 子進程只是提示用戶輸入。

基本上沿着

def commit_user(orig,ui,repo,*pats,**opts): 
    subprocess.call(["C:\test.exe"]) 
    orig(ui,repo,*pats,**opts) 

def uisetup(ui): 
    extensions.wrapcommand(commands.table, 'commit', commit_user) 

其中TEST.EXE包含一個簡單的輸入提示

然而,雖然在3.0.1 subprocess.call()在新的命令窗口被打開的行(默認情況下),3.1.1似乎沒有這樣做,在輸入呼叫有超時的情況下。我如何在3.1.1中獲得與3.0.1相同的行爲?

我試過用shell,stdin,subprocess.call的標準輸出參數搞亂,但我似乎只打破了更多的東西。

它在命令行中工作,輸入和輸出流只與命令行綁定,但不在TortoiseHg中,我讀過的沒有實際的標準輸入,標準輸出和標準錯誤只是放置在輸出中日誌。

編輯:我已經嘗試過,因爲沒有輸入諸如:

p = subprocess.Popen(["cmd"],stdout = subprocess.PIPE) 
p.communicate() 

這也似乎掛起。 在Python中可以使用TortoiseHg調用命令行樣式命令嗎?

EDIT2:

os.system("cmd") 

也打破。 所有方法都有同樣的錯誤:

cmdserver: timed out while reading: 'Microsoft Windows [V'... 

所以它似乎總有什麼在部分地方的背景,其中一個新的進程可以被看作是掛在任務管理器中運行。

編輯3:最後,經過一番研究...... 3.1對標準輸入和標準輸出進行了重大修改,其中所有內容都被輸入到「服務器」。

https://www.mercurial-scm.org/wiki/CommandServer

+0

如果EDIT3 - 「命令服務器」的答案是你原來的問題,請張貼它作爲一個實際的答案,並給它的複選標記,以便將來人們知道你發現了什麼! – Edward 2014-10-07 15:22:05

+0

沒有機會混淆命令服務器的東西,所以不確定這是否能解決我的問題,並且我可以訪問一個簡單的輸入/輸出對話框。另外,理想情況下,我與服務器無關(所以我可以避免在新的TortoiseHg版本之間儘可能地更新)。 – user3814551 2014-10-07 20:29:02

回答