簡體   English   中英

使用subprocess.Popen在外部gnome終端中運行命令

[英]running commands in an external gnome-terminal using subprocess.Popen

我正在嘗試使用生成的終端中的通訊執行命令。

 sitecreate_proc = subprocess.Popen(['gnome-terminal'], stdout=subprocess.PIPE, stdin=subprocess)
 out = sitecreate_proc.communicate("pwd")
 print out

“ out”變量始終為空。 顯示終端是必要的。

gnome-terminal是一個圖形應用程序,作為一個應用程序, 很可能不使用它從父進程中獲得的自己的標准流

您需要運行控制台應用程序才能與其進行通信-

  • 這些命令本身:

     >>> subprocess.check_output("pwd") '/c/Users/Ivan\\n' 
  • 交互式shell命令 ,然后向其發送輸入並根據與python的bash交互接收響應


如果您只需要將流數據輸出到python使用的同一控制台,則可以在獲取數據時簡單地寫出它們的數據- 使用tee自動或在適當的時候手動進行。


相反,如果您需要在桌面上啟動一個獨立的終端仿真器窗口並通過IPC與之交互,那完全是另一回事-即UI自動化 ,並且與標准控制台流無關。

在Linux中,最常見的方式是D-Bus (上一鏈接中概述了其他選項)。 但是,Ppl報告(截至2012年) 顯示gnome-terminal不支持D-bus,您必須跳過箍才能與其進行交互 雖然有一篇關於通過D-Bus控制konsole的文章

當我記得交流返回一個元組時,

communication()返回一個元組(stdoutdata,stderrdata)

因此您不能與用戶進行通訊(“ pwd”)。 gnome-terminal返回,然后嘗試通過sitecreate_proc.communicate()[0]sitecreate_proc.communicate()[0]來獲得該結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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