2013-10-10 94 views
0

我將Git支持添加到用Python編寫的現有應用程序(使用PyQt)。我決定通過subprocess.Popen直接與Git命令交互,並解析不同命令的結果(因爲我們想要實現的幾件事情導入完整的第三方庫似乎不太合適)。使用Python的git-fetch進行通信

到目前爲止,我已成功合併git branchgit remote,這或多或少有效,因爲我仍在本地回購庫中。
現在我正在處理git fetch並遇到困難。

首先,我從stderr上的gnome-keyring得到了一個「警告」。這是由於我的安裝有問題,但我們當然不應該因爲這種事情而掛斷。所以我簡單地忽略這個警告。可能這很不明智,但現在我認爲如果應該報告問題,我們可以接受這種解決方法。

但後來我遇到了問題,shell問我(再次在stderr上)輸入我的SSH密碼。這也是我在特定計算機上安裝的問題,但如果用戶更喜歡個人密碼,我們應該真的接受。所以我必須處理這種情況。


因此冗長的介紹後,這個問題是相當簡潔:

如果我通過subprocess.Popen運行像git fetch從Python中的shell命令,這外殼程序要求的用戶反饋,我怎麼能與它進行交互,從蟒蛇?
基本上我想顯示stderr輸出給用戶並允許他輸入他的密碼。 (然後當然實現一個選項來存儲這個密碼在應用程序中。)

回答

0

如果我記得沒錯,ssh非常關注它如何與用戶交互,甚至直接打開/dev/tty(不只是嘗試工作其STDERR_FILENO)。但是,您可以設置SSH_ASKPASSDISPLAY以使其在X11顯示屏上使用特定程序。手冊頁指出,您可能必須將其stdin連接到/dev/null才能完成此項工作。

因此,這兩種方法看起來都是用它來工作,或者從Python內部分配一個僞tty,然後運行需要ssh和那個pty作爲其控制終端的git命令。內置的(但只有Unix/Linux)os.openpty會讓你在那裏,但還有更多事情要做。

pexpect module擁有你需要的一切,雖然我從來沒有用過它。