2017-07-12 58 views
0

我遇到的一個問題是:Python3,用shell參數工作subprocess.Popen反向

call subprocess.Popen('adb shell ls', shell=True) # has NO console output 

call subprocess.Popen('adb shell ls', shell=False) # has console output 

結果被反向,因爲我的研究。

任何人都知道shell參數發生了什麼? 謝謝!

ENV:對64位的Python 3.6 64位Windows 7

回答

0

注: 從文檔字符串: 「殼牌:如果爲true,該命令將通過shell執行」

「shell」參數不處理控制檯輸出。這就是說,如果命令(第一個參數)是類型「shell」/「bash」/ etc,類似於「#!/ bin/bash」定義爲腳本文件的第一行。

有幾個選項,以得到執行與「子」的過程輸出:從工藝對象輸出

  1. 閱讀,「標準輸出」文件類型成員 - 通過使用標準輸出= subprocess.PIPE:
In [2]: proc = subprocess.Popen("ls /tmp/dir1", shell=True, 
      stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
In [3]: proc.poll() 
Out[3]: 0 
In [4]: proc.stdout 
Out[4]: <open file '<fdopen>', mode 'rb' at 0x105e06f60> 
In [5]: print proc.stdout.read() 
file1 
file2 
output1 
從你自己的文件類型的對象
  • 讀輸出 - 從通過自己的文件對象對於s Tdout時:
  • In [6]: with open("/tmp/dir1/output1", "wt") as stdout_file: 
        ...:  proc = subprocess.Popen("ls /tmp/dir1", shell=True, stdout=stdout_file, stderr=subprocess.PIPE) 
        ...:  while proc.poll() is None: 
        ...:   pass 
        ...:  
    
    In [7]: with open("/tmp/dir1/output1", "rt") as stdout_file: 
        ...:  print stdout_file.read() 
        ...:  
    file1 
    file2 
    output1 
    
  • 使用默認「標準輸出」 - 到控制檯 - 上的「使用os.system」類似輸出。 (大概是什麼傻冒找)
  • In [8]: proc = subprocess.Popen("ls /tmp/dir1", shell=True) 
    
    In [9]: file1 file2 output1 
    

    查看文檔字符串爲更多的選擇。