Os.system() ile verdiyim komutlari deyiskene nasil atarim?

os.system(“ls”) komutunu veriyorum direk terminalda calisdiriyor ben ise verdiyim komutun yalnizca cikdisini istiyorum os.system() ile cikdiyi bir deyiwkene atamak icin illaki dosyaya sonrasindada dosyadan okuma yapiyorum, umarim ne istediyimi anlata bilmisimdir acaba boyle bir islem mumkunmu?

Aşağıdaki kodları inceleyebilirsiniz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


def yaz():
    with open("../yeni.txt", "w") as f:
        import subprocess
        subprocess.Popen("ls", shell=True, stdout=f)


def oku():
    veri = ""
    with open("../yeni.txt", "r") as f:
        for i in f:
            veri += i
    import os
    os.remove("../yeni.txt")
    return veri


if __name__ == "__main__":
    yaz()
    # Yazma işlemi ile okuma işlemi arasında
    # çok kısa bir süre için okuma işlemi bekletilir.
    # Okuma işlemi, belirtilen dizinde, dosya 
    # oluşmadan başlarsa, doğal olarak hiç bir veri okunamamış olur.
    import time
    time.sleep(0.1)
    x = oku()
    print(x)
1 Beğeni

Merhaba.

Şu gönderiyi inceler misiniz: Cmd'ye komut gönderme ve çıkan sonucu alma

İyi çalışmalar.

1 Beğeni

bakdim fakat linuxda calismiyor qaliba deyiskene terminal komutunu atayamadim

Çalışmaması için bir neden göremedim, yazdığınız kodları ve aldığınız hatayı yazar mısınız?

Merhaba.

Kodlarımda eksiklikler olduğunu gördüm; aslında şöyle olmalı:

import os
import sys
import io

# Orijinal stdout'u sonradan değişikliği geri alabilmek için kaydet.
orijinal_stdout = sys.stdout

# stdout'u bir StringIO nesnesine yönlendir.
# StgringIO'yu RAM'de saklanan bir dosya gibi düşünebilirsiniz.
stringIO = io.StringIO()
sys.stdout = stringIO

# Bir komut çalıştır.
# Bu komutun çıktısı stdout'u yönlendirdiğimiz StringIO'ya yazılacaktır.
os.system('dir')

# stdout'u geri al.
# Bu, ekrana çıktı verebilmemiz için gereklidir.
sys.stdout = orijinal_stdout

# Çalıştırılan komutun çıktısını yazdırıyoruz.
# stdout'u yönlendirdiğimiz için bu çıktı StringIO nesnesinde olmalı.
print("Çalıştırılan komut çıktısı şudur:\n" + stringIO.getvalue())

Ama bu kodlar da düzgün çalışmıyor, neden olduğunu anlayamadım. Şu anda araştıracak vaktim de yok maalesef. Bir ara bakacağım. Bu arada belki siz nedenini bulabilirsiniz.

İyi çalışmalar.

Bu başlıktaki ilk mesajımda yazdığım kodları çalıştırmayı denediniz mi?

1 Beğeni

Merhaba. Şuradaki kodu dener misiniz: https://stackoverflow.com/a/1218951/1583714