Opsi untuk popen
dapat digunakan di call
args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0
Jadi...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Kemudian Anda dapat melakukan apa yang Anda inginkan dengan myoutput
Selain itu, Anda dapat melakukan sesuatu yang lebih mirip dengan output yang disalurkan seperti ini.
dmesg | grep hda
akan menjadi:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Ada banyak info bagus dan berguna di halaman manual python.
Jika Anda ingin menulis output ke file, Anda dapat menggunakan argumen stdout dari subprocess.call
.
Dibutuhkan keduanya
None
(defaultnya, stdout diwarisi dari induk (skrip Anda))subprocess.PIPE
(memungkinkan Anda untuk mem-pipe dari satu perintah/proses ke yang lain)- objek file atau deskriptor file (apa yang Anda inginkan, agar hasilnya ditulis ke file)
Anda perlu membuka file dengan sesuatu seperti open
dan berikan bilangan bulat deskriptor objek atau file ke call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Saya menduga objek seperti file yang valid akan berfungsi, seperti soket (terkesiap :)), tetapi saya belum pernah mencobanya.
Seperti yang disebutkan marcog di komentar, Anda mungkin ingin mengarahkan stderr juga, Anda dapat mengarahkan ini ke lokasi yang sama dengan stdout dengan stderr=subprocess.STDOUT
. Salah satu dari nilai yang disebutkan di atas juga berfungsi, Anda dapat mengalihkan ke tempat yang berbeda.