Python Script menjalankan perintah di Terminal


109

Saya membaca ini di suatu tempat beberapa waktu yang lalu tetapi sepertinya tidak dapat menemukannya. Saya mencoba menemukan perintah yang akan menjalankan perintah di terminal dan kemudian menampilkan hasilnya.

Contoh: scriptnya adalah:

command 'ls -l'

Ini akan keluar hasil dari menjalankan perintah itu di terminal

Jawaban:


198

Ada beberapa cara untuk melakukannya:

Cara sederhana menggunakan modul os:

import os
os.system("ls -l")

Hal-hal yang lebih kompleks dapat dicapai dengan modul subprocess: misalnya:

import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]

43
Saya tidak ingin meremehkan Anda, tetapi. Anda harus menggunakan subproses untuk semuanya. Ini jauh lebih aman. subprocess.call () akan memberi Anda antarmuka yang bagus untuk menggantikan formulir panggilan sederhana.
Jorge Vargas

Terima kasih atas jawaban itu sobat. Akan menggunakan python untuk aplikasi pertama saya di desktop Ubuntu, ini akan sangat membantu saya.
LinuxBill

1
Bagaimana saya bisa mendapatkan respons lengkap dari sebuah perintah, os.system("nslookup gmail.com")hanya mengembalikan baris terakhir 0, tetapi saya ingin mendapatkan respons penuh.
Parthapratim Neog

3
@JorgeVargas Dapatkah Anda membantu saya memahami mengapa subproses harus digunakan untuk semuanya? Mengapa lebih aman?
Soutzikevich

38

Saya lebih suka menggunakan modul subproses:

from subprocess import call
call(["ls", "-l"])

Alasannya adalah jika Anda ingin melewatkan beberapa variabel dalam skrip ini memberikan cara yang sangat mudah misalnya mengambil bagian kode berikut

abc = a.c
call(["vim", abc])

Bekerja dengan baik untuk saya membuka gambar dengan parameter ekstracall(["eog", "1breeproposal.png", "-f"])
Josh


4

Anda juga harus melihat ke commands.getstatusoutput

Ini mengembalikan tupel dengan panjang 2 .. Yang pertama adalah bilangan bulat kembali (0 - ketika perintah berhasil) kedua adalah seluruh output seperti yang akan ditampilkan di terminal.

Untuk ls

    import commands
    s=commands.getstatusoutput('ls')
    print s
    >> (0, 'file_1\nfile_2\nfile_3')
    s[1].split("\n")
    >> ['file_1', 'file_2', 'file_3']

2
import os
os.system("echo 'hello world'")

Ini seharusnya berhasil. Saya tidak tahu cara mencetak output ke shell python.



1

Jupyter

Di notebook jupyter Anda dapat menggunakan fungsi ajaib !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

Untuk menjalankan ini sebagai .pyskrip, Anda perlu menggunakanipython

files = get_ipython().getoutput('ls -a /data/dir/')

jalankan skrip

$ ipython my_script.py

0

Anda dapat mengimpor modul 'os' dan menggunakannya seperti ini:

import os
os.system('#DesiredAction')

0

untuk menggunakan subproses python3

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.