Saya ingin menetapkan output dari perintah yang saya jalankan gunakan os.system
untuk variabel dan mencegahnya menjadi output ke layar. Tetapi, dalam kode di bawah ini, output dikirim ke layar dan nilai yang dicetak var
adalah 0, yang saya kira menandakan apakah perintah berjalan dengan sukses atau tidak. Apakah ada cara untuk menetapkan output perintah ke variabel dan juga menghentikannya agar tidak ditampilkan di layar?
var = os.system("cat /etc/services")
print var #Prints 0
os.system
(atauos.popen
, sesuai jawaban yang Anda terima): gunakansubprocess.Popen
, itu jauh lebih baik!subprocess.Popen
- cukup tambahkanshell=True
!shell=True
(umumnya) adalah ide yang sangat buruk! Anda harus sangat yakin dengan apa yang Anda jalankan :)Jawaban:
Dari " Equivalent of Bash Backticks in Python ", yang saya tanyakan sejak lama, yang mungkin ingin Anda gunakan adalah
popen
:Dari dokumen untuk Python 3.6 ,
Berikut kode yang sesuai untuk
subprocess
:sumber
subprocess.check_output
solusi Walter lebih dekat dengan Pythonic one-liner yang tampaknya Anda cari, selama Anda tidak pedulistderr
.os.popen
?shell=True
. Lihat docs.python.org/3/library/…shell=True
, tetapi juga salah dalam hal ini.shell=True
menjadikan shell sebagai proses anak dan bukancat
,out
danerr
merupakan stdout / stderr dari proses shell daripadacat
prosesAnda mungkin juga ingin melihat
subprocess
modul, yang dibangun untuk menggantikan seluruh keluargapopen
panggilan-jenis Python .Keuntungan yang dimilikinya adalah bahwa ada banyak fleksibilitas dengan cara Anda menjalankan perintah, di mana stream in / out / error standar terhubung, dll.
sumber
check_output
telah ditambahkan dengan python 2.7 docs.python.org/2.7/library/…stderr=subprocess.STDOUT
untuk menangkap kesalahan standar jugaModul perintah adalah cara tingkat tinggi yang cukup untuk melakukan ini:
status adalah 0, output adalah isi dari / etc / services.
sumber
Untuk python 3.5+ disarankan agar Anda menggunakan fungsi run dari modul subprocess . Ini mengembalikan
CompletedProcess
objek, dari mana Anda dapat dengan mudah mendapatkan output serta kode pengembalian. Karena Anda hanya tertarik pada output, Anda dapat menulis pembungkus utilitas seperti ini.sumber
Saya tahu ini sudah dijawab, tetapi saya ingin berbagi cara yang berpotensi lebih baik untuk memanggil Popen melalui penggunaan
from x import x
dan fungsi:sumber
cmd.py
, dan kemudian di file utama saya, saya menulisfrom cmd import cmdline
dan menggunakannya sesuai kebutuhan.saya melakukannya dengan os.system temp file:
sumber
Python 2.6 dan 3 secara khusus mengatakan untuk menghindari penggunaan PIPE untuk stdout dan stderr.
Cara yang benar adalah
sumber