Python Komut Dosyası, Terminal'de komutları yürütür


110

Bunu bir süre önce bir yerde okudum ama bulamıyorum. Terminalde komutları çalıştıracak ve ardından sonucu çıkaracak bir komut bulmaya çalışıyorum.

Örneğin: komut dosyası şöyle olacaktır:

command 'ls -l'

Terminalde bu komutu çalıştırmanın sonucu ortaya çıkacaktır.

Yanıtlar:


198

Bunu yapmanın birkaç yolu vardır:

İşletim sistemi modülünü kullanmanın basit bir yolu:

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

Alt süreç modülü ile daha karmaşık şeyler başarılabilir: örneğin:

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

44
Size olumsuz oy vermek istemiyorum ama. Her şey için alt süreç kullanmalısınız. Bu çok daha güvenli. subprocess.call (), basit çağrı formunu değiştirmek için size güzel bir arayüz sağlayacaktır.
Jorge Vargas

Cevap için teşekkürler dostum. Ubuntu masaüstündeki ilk uygulamam için python kullanacağım, bu bana gerçekten yardımcı olacak.
LinuxBill

1
Bir komutun tam yanıtını nasıl alabilirim, os.system("nslookup gmail.com")yalnızca son satırı döndürür 0, ancak tam yanıtı almak istiyorum.
Parthapratim Neog

3
@JorgeVargas Alt işlemin neden her şey için kullanılması gerektiğini anlamama yardım eder misin? Neden daha güvenli?
Soutzikevich

39

Alt işlem modülünün kullanılmasını tercih ediyorum:

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

Nedeni, eğer betikte bir değişken geçirmek istiyorsanız, bu çok kolay bir yol sağlar, örneğin kodun aşağıdaki bölümünü alın

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

Ekstra parametrelerle bir resim açmak benim için iyi çalıştıcall(["eog", "1breeproposal.png", "-f"])
Josh


4

Ayrıca commands.getstatusoutput'a da bakmalısınız.

Bu, uzunluğu 2 olan bir demet döndürür. Birincisi, dönüş tamsayısıdır (0 - komutlar başarılı olduğunda), ikincisi, terminalde gösterileceği gibi çıktının tamamıdır.

Ls için

    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'")

Bu çalışmalı. Çıktıyı python Kabuğuna nasıl yazdıracağımı bilmiyorum.



1

Jüpiter

Bir jupyter not defterinde sihirli işlevi kullanabilirsiniz !

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

ipython

Bunu bir .pykomut dosyası olarak yürütmek için kullanmanız gerekiripython

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

betiği çalıştır

$ ipython my_script.py

0

'Os' modülünü içe aktarabilir ve şu şekilde kullanabilirsiniz:

import os
os.system('#DesiredAction')

0

python3 için alt işlemi kullanın

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.