簡體   English   中英

在子進程Popen中使用python

[英]Using python with subprocess Popen

我正在努力將子進程與python一起使用。 這是我的任務:

  1. 通過命令行啟動api(這與在命令行上運行任何參數沒有什么不同)
  2. 驗證我的API是否已啟動。 最簡單的方法是輪詢標准。
  3. 針對API運行命令。 當我能夠運行新命令時出現命令提示符
  4. 通過輪詢標准輸出來驗證命令是否完成(API不支持日志記錄)

到目前為止,我嘗試過的是:
1.我使用Popen卡在這里。 我知道,如果我使用subprocess.call("put command here")可以正常工作。 我想嘗試使用類似於以下內容的內容:

import subprocess

def run_command(command):
  p = subprocess.Popen(command, shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.STDOUT)

我在哪里使用run_command("insert command here")但這沒有任何作用。

關於2.我認為答案應該類似於這里: 從Python運行shell命令並捕獲輸出 ,但是由於我無法使1.正常工作,所以我還沒有嘗試過。

為了至少真正啟動子流程,您必須告訴Popen對象真正進行通信。

def run_command(command):
    p = subprocess.Popen(command, shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)
    return p.communicate()

您可以查看Pexpect ,這是專門設計用於與基於Shell的程序進行交互的模塊。

例如,啟動scp命令並等待密碼提示,您可以執行以下操作:

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)

有關Python 3版本,請參見Pexpect-u

暫無
暫無

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

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