Python'dan bir programı nasıl çalıştırabilirim? os.system, yoldaki boşluklar nedeniyle başarısız oluyor

Harici bir programı çalıştırması gereken bir Python betiğim var, ancak bazı nedenlerden dolayı başarısız oluyor.

Eğer aşağıdaki komut dosyasına sahipsem:

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();

Ardından aşağıdaki hata ile başarısız olur:

'C:\Temp\a' dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor.

Eğer programdan tırnak işaretleriyle kaçarsam:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();

O zaman işe yarıyor. Ancak, bir parametre eklersem tekrar çalışmayı durduruyor:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();

Bir programı çalıştırmanın ve tamamlanmasını beklemenin doğru yolu nedir? Bir iş yapan ve sonra sadece çıkan görsel bir program olduğu için ondan çıktı okumama gerek yok, ancak tamamlanmasını beklemem gerekiyor.

Ayrıca, programı aralıksız bir yola taşımanın da bir seçenek olmadığını unutmayın.


Bu da işe yaramıyor:

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();

Tek/çift tırnak işaretlerinin yer değiştirdiğine dikkat edin.

Burada Not Defteri için bir parametre olsun ya da olmasın, hata mesajıyla başarısız olur

Dosya adı, dizin adı veya birim etiketi sözdizimi yanlış.

Çözüm

subprocess.call çeşitli kabukların alıntı kurallarıyla uğraşmak zorunda kalmaktan kaynaklanan sorunları önleyecektir. Bir dize yerine bir liste kabul eder, böylece argümanlar daha kolay sınırlandırılır. ör.

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
Yorumlar (9)

İşte bunu yapmanın farklı bir yolu.

Windows kullanıyorsanız, Explorer'da dosyaya çift tıklamak veya DOS "start" komutuna argüman olarak dosya adını vermek gibi aşağıdaki işlemler yapılır: dosya, uzantısı hangi uygulamayla ilişkilendirilmişse (varsa) o uygulamayla açılır.

filepath = 'textfile.txt'
import os
os.startfile(filepath)

Örnek:

import os
os.startfile('textfile.txt')

Bu, Notepad .txt dosyalarıyla ilişkilendirilmişse textfile.txt dosyasını Notepad ile açacaktır.

Yorumlar (3)

Windows'ta kısayolları kullanırken yaşadığınız sorunla aynı olduğundan şüpheleniyorum... Şunu dene:

import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");
Yorumlar (4)