簡體   English   中英

為什么不能在python中使用subprocess.PIPE傳遞參數?

[英]Why cannot pass arguments with subprocess.PIPE in python?

我正在嘗試做一些非常簡單的事情,以學習如何在python中使用subprocess進程

我正在嘗試的是這樣的:

ll | egrep "*gz"

因此,在閱讀python手冊(我不太了解)之后,我嘗試了以下方法:

lista = subprocess.Popen(['ls', '-alF'], stdout=subprocess.PIPE)
filtro = subprocess.Popen(['egrep', '"*gz"'], stdin=lista.stdout, stdout=subprocess.PIPE)
filtro.communicate()[0]

但是我所得到的只是''並且我真的不知道該怎么做,我已經讀過這篇文章,但是似乎我根本不了解它。。。有人可以向我解釋一下如何使用它。之后與其他命令?

提前致謝!!

問題可能出在egrep參數周圍的雙引號引起來。 嘗試以下方法:

import subprocess
ls = subprocess.Popen(['ls', '-alF'], stdout=subprocess.PIPE)
egrep = subprocess.Popen(['egrep', '\.gz$'], stdin=ls.stdout, stdout=subprocess.PIPE)
print egrep.communicate()[0]

我假設您正在此處尋找以“ .gz”結尾的文件,因為您的初始正則表達式沒有意義。 如果僅查找以“ gz”結尾的文件,則應使用“ gz $”。 而且,如果您不希望出現在“ gz”行中的位置,則只需使用“ gz”。

編輯:這是一個完整的示例。 在包含三個文件“ pipe.py”,“ test1.py.gz”和“ test2.py.gz”的目錄中,其中“ pipe.py”是上面的腳本,我執行:

$ python pipe.py

結果

-rw-r--r-- 1 amaurea amaurea  146 Jan 30 20:54 test1.py.gz
-rw-r--r-- 1 amaurea amaurea  150 Jan 30 20:54 test2.py.gz

在Unix上,利用shell參數:

lista = subprocess.Popen('ls -alF', stdout=subprocess.PIPE, shell=True)
filtro = subprocess.Popen('egrep "*gz"', stdin=lista.stdout, stdout=subprocess.PIPE, shell=True)
filtro.communicate()[0]

您可以簡單地復制命令,而不必擔心將其分成參數列表。

您也可以顯式指定shell:

subprocess.Popen('bash -c "ls -l"', stdout=subprocess.PIPE, shell=True)

暫無
暫無

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

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