Python ile başka terminalin çıktılarını almak

Tam bunu nasıl ifade edebileceğim bilmiyorum ama. Linux bir işlemci simülasyon programı var SPIKE adında RISC-V mimarisinin. Ben bu programı çalıştırırken alttaki komutu kullanıyorum.
os.system("spike -d --isa=rv32gc /opt/riscv/riscv32-unknown-elf/bin/pk a.out")

Daha sonra SPIKE’ın terminalide açılıyor ama spike’ın kendi terminalinede bir şeyler yazmasını istiyorum olmuyor. Bunu nasıl yapmam lazım.
Aşağıdaki olay yukarıdaki komutu çalıştırdıktan sonraki SPIKE ortamı.

os.system ile olmaz, subprocess kullanmak lazim. capture_output veya stdout=subprocess.PIPE; dokumentasyonda daha fazla detay ve ornek var.

teşekkür ederim bakacağım. Baya kararsız kalmıştım. Ne modülüne bakacağım diye netede bunu nasıl açıklayacağımı bulamamıştım.

Hala benim de kararsiz kaldigim bir sey; Python’un -gittikce uzaklastigi- “her seyi yapmanin bir yolu olmasi lazim” zenine de uzak.

system(3) bir C (ve POSIX) cagrisi, os’te o yuzden var. Python’da hemen her zaman subprocess kullanmak lazim.

1 Beğeni

subprocess’te `subproces.call kullanmıştım işe yaramamıştı başka komutlar lazım. Ben birazda yeniyim. Aslında verilog ile işlemci tasarlıyorum. Kendi işlemcimle SPIKE adında modeli kıyaslayıp doğrulunu denetmem lazım ama sistem yeni SPIKE ise bir konsol işlemci modeli. Python ile bunu bir yere logo olarak kaydetmem lazımdı. ama ilk başta komutlar çalışmamıştı. Şimdi biraz çabalayıp öğrenmem lazım. subprocess biraz daha araştıracağım. Teşekkür ederim.

Programin ciktisi mi gerekiyor, yoksa program calisirken girdi-cikti alip etkilesmek mi lazim?

Ilki daha kolay cunku. Ustelik system’le bile belki >hede.txt gibi redirection kullanarak yapmak mumkun. Unix mentalitesine sahip tool’larin cogu interaktif olmayan bir sekilde calistirilip sonuclari boyle kullanilabiliyor.

Degismeyen girdi aldigi durum da kolay (<hodo.txt).

Karmasik interaksiyon gereken durumlarda API veya en azindan bi kontrol soketi gibi bir sey kullanmak daha basit olabiliyor.

Spike’a GDB ile baglanmak mumkunmus.

Gerci GDB’yi python’dan kontrol etmekte baya zorlanmistim. Text API’si de var, python API’si de sozde, ama dokumentasyon ve python kutuphanesi bulmak baya zordu ve sonunda GDB scripti + manuel halletmistim derdimi.

Yine de bugun ayni isi yapacak olsam Python API’ye tekrar bakarim.

SPIKE ile çıktı alıp bir texte bir formatla kaydetsem yeterli. Ama sanırım spikeyın bu çıktıları tek tek komutla değilde kendisinin bir argüman ile çıktısını alıp bir not defterine kaydettiğim bir komutunu buldum. spike --log-commits denilince yazdığım assembly komutlarının hangi registerı değiştirdiğini yazan ve hepsini bir txt kaydeden bir komut buldum. Sistem aşırı yeni olunca bunları anlatan kaynak bulmak baya zorlaşıyor. Bende kendim tek tek deneyerek yaptım.

O zaman dedigim gibi spike --log-commits >stdout.txt 2>stderr.txt seklinde calistirarak ciktiyi dosyalara koymak mumkun. os.system ile bile olabilir diye hatirliyorum.

1 Beğeni

evet şu anda bunu bulabildin şimdi SPIKE ile başka dertlerim var onlar hakkında araştırma yapacam bir aşamayı geçince başka bir aşama karşıma çıkıyor. Yardımın için çok teşekkür ederim.