ユーザーガイドで推奨されているように、os.popenからsubprocess.popenに移動しようとしています。私が抱えている唯一の問題は、readlines()を機能させる方法が見つからないように見えることです。
昔はできるようになりました
list = os.popen('ls -l').readlines()
でもできません
list = subprocess.Popen(['ls','-l']).readlines()
_subprocess.Popen
_では、communicate
を使用してデータを読み書きします。
_out, err = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE).communicate()
_
次に、プロセスのstdout
からの文字列をsplitlines()
でいつでも分割できます。
_out = out.splitlines()
_
ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
out = ls.stdout.readlines()
または、行ごとに読みたい場合(おそらく、他のプロセスはls
よりも集中的です):
for ln in ls.stdout:
# whatever
stdout出力を文字列として返すシステムコールを作成する :
lines = subprocess.check_output(['ls', '-l']).splitlines()
サブプロセスを使用するより詳細な方法。
# Set the command
command = "ls -l"
# Setup the module object
proc = subprocess.Popen(command,
Shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# Communicate the command
stdout_value,stderr_value = proc.communicate()
# Once you have a valid response, split the return output
if stdout_value:
stdout_value = stdout_value.split()
_list = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE).communicate()[0].splitlines()
_
help(subprocess)
から直接