Saya mendapatkan kesalahan berikut:
WindowsError: [Error 2] The system cannot find the file specified
Kode saya adalah:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bit. Python 3.x terbaru, stabil.
Ada ide?
Terima kasih,
python
path
python-3.x
Sri
sumber
sumber
Jawaban:
Jika perintahnya adalah shell built-in, tambahkan 'shell = True' ke panggilan.
Misal untuk
dir
Anda akan mengetik:Mengutip dari dokumentasi:
sumber
dir.exe
saat ada/bin/ls
in * nix.dir
diimplementasikan oleh CMD.EXE seperticd
yang diterapkan oleh bash .PATH
darios.environ
dan mencarinya secara manual.Di Windows, saya yakin
subprocess
modul tidak melihat ke dalamPATH
kecuali Anda lulusshell=True
karena digunakan diCreateProcess()
belakang layar. Namun,shell=True
bisa menjadi risiko keamanan jika Anda menyampaikan argumen yang mungkin datang dari luar program Anda. Agarsubprocess
tetap dapat menemukan file yang dapat dieksekusi dengan benar, Anda dapat menggunakanshutil.which
. Misalkan yang dapat dieksekusi di AndaPATH
diberi namafrob
:(Ini berfungsi pada Python 3.3 dan yang lebih baru.)
sumber
Di Windows, Anda harus memanggil melalui cmd.exe. Seperti yang disebutkan Apalala, perintah Windows diimplementasikan dalam cmd.exe bukan sebagai executable terpisah.
misalnya
/ c memberi tahu cmd untuk menjalankan perintah ikuti
Ini lebih aman daripada menggunakan shell = True, yang memungkinkan injeksi shell.
sumber
/k
alih-alih/c
. Masukcmd /?
di baris perintah untuk detailnya.Jika Anda menggunakan PowerShell, maka di dalamnya akan tersedia
subprocess.call(['powershell','-command','dir'])
. Powershell mendukung sebagian besar perintah POSIXsumber
Setelah banyak garukan kepala, saya menemukan bahwa menjalankan file yang terletak di C: \ Windows \ System32 \ saat menjalankan versi python 32-bit pada mesin 64-bit adalah masalah potensial, karena Windows mencoba untuk mengungguli prosesnya, dan alihkan panggilan ke C: \ Windows \ System32 ke C: \ Windows \ SysWOW64.
Saya menemukan contoh cara memperbaikinya di sini: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
sumber
Mengutip dari dokumentasi:
"Sebelum Python 3.5, ketiga fungsi ini terdiri dari API tingkat tinggi untuk subproses. Anda sekarang dapat menggunakan run () dalam banyak kasus, tetapi banyak kode yang ada memanggil fungsi ini."
SO: daripada menggunakan subprocess.call, gunakan subprocess.run untuk Python 3.5 dan yang lebih baru
sumber
Saya menemui masalah yang sama ketika saya memanggil PHP. Alasannya adalah PHP tidak ada di PATH sehingga perintah PHP tidak ditemukan. Tetapi PowerShell menemukan itu memang ada di lokasi saat ini dan itu menyarankan untuk mengganti 'PHP' dengan '. \ PHP' jika saya mempercayai perintah ini. Kemudian itu berjalan dengan baik.
sumber