Для этой конкретной проблемы вы можете использовать нативные вызовы Python:
import os
import re
for name in (name for name in os.listdir('/etc/tor/statistiekjes/')
if re.search(FILE,name)):
print(repr(name))
Однако вы, вероятно, ищете более общее решение для вызова внешних программ.В этом случае используйте subprocess
вместо os.popen
, поскольку os.popen
устарело:
import subprocess
import shlex
proc1 = subprocess.Popen(shlex.split('ls /etc/tor/statistiekjes/'),
stdout=subprocess.PIPE)
proc2 = subprocess.Popen(shlex.split('egrep {pat}'.format(pat=FILE)),
stdin=proc1.stdout,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
out,err=proc2.communicate()
print(out)
См. «Замена конвейера оболочки» .
PS,subprocess.Popen
имеет параметр shell=True
, который также можно использовать.Однако лучше по возможности избегать использования shell=True
. Это угроза безопасности .