Apa yang saya lakukan di baris perintah:
cat file1 file2 file3 > myfile
Yang ingin saya lakukan dengan python:
import subprocess, shlex
my_cmd = 'cat file1 file2 file3 > myfile'
args = shlex.split(my_cmd)
subprocess.call(args) # spits the output in the window i call my python program
python
subprocess
catatemypythoncode.dll
sumber
sumber
os.sendfile()
solusi berbasis mungkin, lihat Mereproduksi perintah unix cat di pythonJawaban:
UPDATE: os.system tidak disarankan, meskipun masih tersedia dengan Python 3.
Penggunaan
os.system
:Jika Anda benar-benar ingin menggunakan subproses, berikut solusinya (sebagian besar diangkat dari dokumentasi untuk subproses):
OTOH, Anda dapat menghindari panggilan sistem sepenuhnya:
sumber
os.system
, dan dapat membuat model denganos.system
tepat, tetapi juga lebih kompleks untuk dikerjakan.os.system
datang sebelumnyasubprocess
. Yang pertama adalah API lama yang ingin diganti oleh yang terakhir.os.system()
ataushell=True
. Untuk mengarahkan keluaran subproses, gunakanstdout
parameter seperti yang ditunjukkan dalam jawaban Ryan Thompson . Meskipun Anda tidak memerlukan subprocess (cat
) dalam kasus Anda, Anda dapat menggabungkan file menggunakan Python murni.Di Python 3.5+ untuk mengalihkan keluaran, cukup berikan pegangan file terbuka untuk
stdout
argumen kesubprocess.run
:Seperti yang ditunjukkan orang lain, penggunaan perintah eksternal seperti
cat
untuk tujuan ini sama sekali tidak relevan.sumber
subprocess.run(my_cmd, stdout=outfile)
yang menggantikansubprocess.call(...)
Tentu saja:
sumber
Ketika Anda menggunakan subproses , proses harus dimatikan. Ini adalah contoh. Jika Anda tidak menghentikan proses, file akan kosong dan Anda tidak dapat membaca apa-apa, dapat berjalan di Windows. Saya tidak dapat memastikan bahwa itu bisa dijalankan di Unix.
sumber
for line in .readlines():
,s +=
) danproc.kill()
dapat menyebabkan hilangnya informasi secara umum (tidak memungkinkan subproses untuk dihentikan dengan baik (di Unix) - konten yang tidak dibilas akan hilang ). Bagaimanapun, catatan tentang buffering lebih cocok sebagai komentar.shlex.split()
, penurunanshell=True
, penurunan>file
, penurunanopen()
, dll dan penggunaanstdout=PIPE
,Timer(1, proc.terminate).start()
;output = proc.communicate()[0]
sebagai gantinya. Berikut contoh lengkapnya . Solusi lainnya: Hentikan membaca keluaran proses dengan Python tanpa hang? Catatan: tidak ada persyaratan dalam pertanyaan bahwa Anda perlu menghentikan proses anak secara manual - Anda dapat mengatasi masalah lain misalnya, suatu proses mungkin berperilaku berbeda jika stdout-nya tty tetapi di luar topik.Salah satu kasus yang menarik adalah memperbarui file dengan menambahkan file serupa ke dalamnya. Maka seseorang tidak perlu membuat file baru dalam prosesnya. Ini sangat berguna dalam kasus di mana file besar perlu ditambahkan. Berikut adalah salah satu kemungkinan menggunakan baris perintah teminal langsung dari python.
sumber