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.