Отображение вывода консоли из подпроцесса

Интересно, как я могу получить вывод подпроцесса, вызванного в сценарии Python?

from sys import argv
from os.path import exists
from subprocess import call

script, source, target = argv

print "Copying from %s to %s" % (source, target)

indata = open(source).read()

if exists(target):
 out_file = open(target, 'w')
 out_file.write(indata)
 call(["cat", target]) #how can I get text printed on console by cat?
 print "OK."
 out_file.close()
1 ответ

Используйте subprocess.Popen:

>>> import subprocess
>>> var = subprocess.Popen(['echo', 'hi'], stdout=subprocess.PIPE)
>>> print var.communicate()[0]
hi

>>>

myfile.txt:

Hello there,

This is a test with python

Regards,
Me.

Бег:

>>> import subprocess
>>> var = subprocess.Popen(['cat', 'myfile.txt'], stdout=subprocess.PIPE)
>>> print var.communicate()[0]
Hello there,

This is a test with python

Regards,
Me.

>>>

Кроме того, у вас есть небольшая ошибка.Вы проверяете, существует ли цель, но вы, вероятно, хотите проверить, существует ли источник.

Вот отредактированный вами код:

from sys import argv
from os.path import exists
import subprocess

script, source, target = argv

print "Copying from %s to %s" % (source, target)

indata = open(source).read()

if exists(source):
 out_file = open(target, 'w')
 out_file.write(indata)
 out_file.close()
 var = subprocess.Popen(["cat", target], stdout=subprocess.PIPE) #how can I get text printed on console by cat?
 out = var.communicate()[0]
 print out
 print "OK."

licensed under cc by-sa 3.0 with attribution.