ฉันได้รับข้อผิดพลาดต่อไปนี้:
WindowsError: [Error 2] The system cannot find the file specified
รหัสของฉันคือ:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 บิต Python 3.x ล่าสุดเสถียร
ความคิดใด ๆ ?
ขอบคุณ
ฉันได้รับข้อผิดพลาดต่อไปนี้:
WindowsError: [Error 2] The system cannot find the file specified
รหัสของฉันคือ:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 บิต Python 3.x ล่าสุดเสถียร
ความคิดใด ๆ ?
ขอบคุณ
คำตอบ:
เมื่อคำสั่งเป็นเชลล์ในตัวให้เพิ่ม 'shell = True' ในการโทร
เช่นdirคุณจะพิมพ์:
import subprocess
subprocess.call('dir', shell=True)
อ้างจากเอกสารประกอบ:
เวลาเดียวที่คุณต้องระบุ shell = True บน Windows คือเมื่อคำสั่งที่คุณต้องการดำเนินการถูกสร้างไว้ในเชลล์ (เช่น dir หรือ copy) คุณไม่จำเป็นต้องใช้ shell = True เพื่อรันไฟล์แบตช์หรือไฟล์ปฏิบัติการบนคอนโซล
dir.exeในขณะที่มี/bin/lsin * nix dirจะดำเนินการโดยCMD.EXEชอบมากcdจะดำเนินการโดยการทุบตี 
                    PATHจากos.environและค้นหาด้วยตนเอง
                    ใน Windows ฉันเชื่อว่าsubprocessโมดูลจะไม่ดูในPATHกรณีที่คุณไม่ผ่านshell=Trueเพราะใช้CreateProcess()เบื้องหลัง อย่างไรก็ตามshell=Trueอาจมีความเสี่ยงด้านความปลอดภัยหากคุณส่งผ่านข้อโต้แย้งที่อาจมาจากภายนอกโปรแกรมของคุณ เพื่อให้ยังคงสามารถที่จะหาที่ปฏิบัติการที่ถูกต้องคุณสามารถใช้subprocess shutil.whichสมมติว่าไฟล์ปฏิบัติการในPATHชื่อของคุณfrob:
subprocess.call([shutil.which('frob'), arg1, arg2])
(ใช้ได้กับ Python 3.3 ขึ้นไป)
ใน Windows คุณต้องเรียกใช้ cmd.exe ดังที่กล่าวถึง Apalala คำสั่งของ Windows ถูกนำไปใช้ใน cmd.exe ไม่ใช่เป็นไฟล์ปฏิบัติการแยกต่างหาก
เช่น
subprocess.call(['cmd', '/c', 'dir'])
/ c บอกให้ cmd รันคำสั่ง follow
วิธีนี้ปลอดภัยกว่าการใช้ shell = True ซึ่งทำให้สามารถฉีดเชลล์ได้
/k /cป้อนcmd /?ที่บรรทัดคำสั่งเพื่อดูรายละเอียด
                    หากคุณใช้ powershell ก็จะเป็นsubprocess.call(['powershell','-command','dir'])เช่นนั้น Powershell รองรับคำสั่ง POSIX ส่วนใหญ่
หลังจากเกาหัวมากฉันพบว่าการเรียกใช้ไฟล์ที่อยู่ใน C: \ Windows \ System32 \ ในขณะที่เรียกใช้ python เวอร์ชัน 32 บิตบนเครื่อง 64 บิตนั้นเป็นปัญหาที่อาจเกิดขึ้นได้เนื่องจาก Windows พยายามที่จะทำกระบวนการที่ชาญฉลาดและ เปลี่ยนเส้นทางการโทรไปยัง C: \ Windows \ System32 ถึง C: \ Windows \ SysWOW64
ฉันพบตัวอย่างวิธีแก้ไขที่นี่: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
อ้างจากเอกสารประกอบ:
"ก่อนหน้า Python 3.5 ฟังก์ชันทั้งสามนี้ประกอบด้วย API ระดับสูงเพื่อประมวลผลย่อยตอนนี้คุณสามารถใช้ run () ได้ในหลาย ๆ กรณี แต่โค้ดที่มีอยู่จำนวนมากจะเรียกใช้ฟังก์ชันเหล่านี้
SO: แทนที่จะใช้ subprocess.call ให้ใช้ subprocess.run สำหรับ Python 3.5 ขึ้นไป
ฉันพบปัญหาเดียวกันในขณะที่เรียก PHP สาเหตุคือ PHP ไม่อยู่ใน PATH จึงไม่พบคำสั่ง PHP แต่ PowerShell พบว่ามีอยู่ในตำแหน่งปัจจุบันและแนะนำให้เปลี่ยน 'PHP' ด้วย '. \ PHP' ถ้าฉันเชื่อคำสั่งนี้ จากนั้นจะทำงานได้ดี