Aşağıdaki hatayı alıyorum:
WindowsError: [Error 2] The system cannot find the file specified
Benim kodum:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bit. Python 3.x en son, kararlı.
Herhangi bir fikir?
Teşekkürler,
Aşağıdaki hatayı alıyorum:
WindowsError: [Error 2] The system cannot find the file specified
Benim kodum:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bit. Python 3.x en son, kararlı.
Herhangi bir fikir?
Teşekkürler,
Yanıtlar:
Komut yerleşik bir kabuk olduğunda, çağrıya bir 'kabuk = True' ekleyin.
Örneğin dirsizin için yazmanız gerekenler:
import subprocess
subprocess.call('dir', shell=True)
Belgelerden alıntı yapmak için:
Windows'ta shell = True belirtmeniz gereken tek zaman, yürütmek istediğiniz komutun kabukta yerleşik olduğu zamandır (örn. Dir veya copy). Bir toplu iş dosyası veya konsol tabanlı yürütülebilir dosya çalıştırmak için shell = True'ya ihtiyacınız yoktur.
dir.exe, bir /bin/lsin * nix varken çağrılan bir yürütülebilir dosya olmamasıdır . dirtarafından uygulanan CMD.EXE çok gibi cdtarafından uygulanan bash .
PATHgelen os.environve manuel olarak aramak.
Windows'ta, subprocessmodülünPATHshell=TrueCreateProcess() perde arkasında kullandığı için geçmedikçe içine bakmadığına inanıyorum . Bununla birlikte, shell=Trueprogramınızın dışından gelen argümanları iletiyorsanız bir güvenlik riski olabilir. Yapmak için subprocessdoğru yürütülebilir bulmak mümkün yine de kullanabilirsiniz shutil.which. Dosyanızdaki yürütülebilir dosyanın PATHadlandırıldığını varsayalım frob:
subprocess.call([shutil.which('frob'), arg1, arg2])
(Bu, Python 3.3 ve üzeri sürümlerde çalışır.)
Windows'ta cmd.exe aracılığıyla aramanız gerekir. Apalala'nın da belirttiği gibi, Windows komutları ayrı yürütülebilir dosyalar olarak değil cmd.exe'de uygulanır.
Örneğin
subprocess.call(['cmd', '/c', 'dir'])
/ c cmd'ye follow komutunu çalıştırmasını söyler
Bu, kabuk enjeksiyonlarına izin veren shell = True kullanmaktan daha güvenlidir.
/kyerine dene /c. cmd /?Ayrıntılar için komut satırına girin .
Çok fazla kafa karıştırdıktan sonra, 64 bitlik bir makinede 32 bitlik bir python sürümü çalıştırırken C: \ Windows \ System32 \ konumunda bulunan bir dosyayı çalıştırmanın, Windows'un süreci daha akıllı hale getirmeye çalışması nedeniyle potansiyel bir sorun olduğunu keşfettim ve çağrıları C: \ Windows \ System32'ye C: \ Windows \ SysWOW64'e yönlendirin.
Bunu nasıl düzelteceğime dair bir örnek buldum: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
Belgelerden alıntı yapmak için:
"Python 3.5'ten önce, bu üç işlev alt işlem için üst düzey API'den oluşuyordu. Artık birçok durumda run () kullanabilirsiniz, ancak mevcut kodların çoğu bu işlevleri çağırır."
SO: subprocess.call yerine Python 3.5 ve üstü için subprocess.run kullanın
Bir PHP'yi ararken aynı sorunla karşılaştım. Bunun nedeni PHP'nin PATH'de olmaması, dolayısıyla PHP komutu bulunamadı. Ancak PowerShell, mevcut konumda var olduğunu buldu ve bu komuta güveniyorsam 'PHP'yi'. \ PHP 'ile değiştirmeyi önerir. Sonra iyi çalışır.