Python ปฏิบัติการเปิดด้วย (Windows)

ฉันได้สร้างสคริปต์ Python (3.x) เล็กน้อยและคอมไพล์เป็นไฟล์ *.exe โดยใช้ Py2Exe สิ่งที่ฉันต้องการคือคลิกที่ไฟล์สุ่มใน explorer และ "เปิดด้วย ... " (โดยใช้ปุ่มเมาส์ขวา) ไฟล์ปฏิบัติการของฉัน โปรแกรมของฉันสามารถใช้เส้นทางของไฟล์ที่เลือกได้

ฉันรู้ว่าโดยทั่วไปแล้วข้อมูลดังกล่าวจะถูกส่งผ่านไปยัง 'argv[...]' อย่างไรก็ตาม มันไม่ทำงาน ฉันได้รับอาร์กิวเมนต์เดียวเท่านั้น นั่นคือพาธแบบเต็มของไฟล์ .exe

ในตอนนี้โปรแกรมจะสร้างเฉพาะไฟล์ *.txt พร้อมอาร์กิวเมนต์ที่ส่งผ่านทั้งหมด

ใครสามารถช่วยฉันออก?

ขอบคุณล่วงหน้า.

รหัสเต็ม:

import sys

filename = "Test.txt"

file = open(filename, 'w')

file.write('Number of arguments: ' + str(len(sys.argv)) + ' arguments.\n')
file.write('Argument List: ' + str(sys.argv))

file.close()

person Roberto    schedule 25.05.2015    source แหล่งที่มา
comment
สิ่งใดปรากฏขึ้นเมื่อคุณพิมพ์ sys.argv (ไม่ทำงาน ไม่ใช่คำสั่งวินิจฉัยที่เป็นประโยชน์)   -  person cdarke    schedule 25.05.2015
comment
อุ๊ย ขอโทษที ฉันได้รับเฉพาะเส้นทางของโปรแกรม ดังนั้นฉันจึงได้รับเพียงอาร์กิวเมนต์เดียวเท่านั้น   -  person Roberto    schedule 25.05.2015
comment
สำหรับแอปพลิเคชัน C++ การใช้อาร์เรย์ argv จะทำงาน ฉันคิดว่ามันควรจะใช้ได้กับ Pyhton ด้วย นอกจากนี้ตามเธรดอื่น ๆ (เช่น stackoverflow.com/questions/15393202/) มันควรจะทำงานโดยใช้ argv   -  person Roberto    schedule 26.05.2015
comment
ค้นหาประเภทนามสกุลไฟล์ที่คุณกำลังพยายามเปิดในคีย์รีจิสทรี HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts ควรมีคีย์ OpenWithList และ OpenWithProgIds   -  person Eryk Sun    schedule 26.05.2015
comment
นอกจากนี้ ให้ตรวจสอบว่าโปรแกรมของคุณจัดการบรรทัดคำสั่งอย่างถูกต้องโดยเรียกใช้จากพรอมต์คำสั่งและส่งผ่านอาร์กิวเมนต์ต่างๆ สิ่งนี้จะนำ Explorer ออกจากวง   -  person Eryk Sun    schedule 26.05.2015
comment
บางทีนี่อาจช่วยได้ - stackoverflow.com/questions/7962157/   -  person Mike Driscoll    schedule 26.05.2015
comment
@eryksun ไฟล์ถูกเปิดอย่างถูกต้อง แต่ดูเหมือนว่าอาร์กิวเมนต์จะไม่ถูกส่งผ่าน ฉันลองเรียกใช้ไฟล์ .py จาก cmd และมันแสดง aruments ทั้งหมดที่ฉันลอง หัวข้อที่เชื่อมโยงอธิบายถึงปัญหาเดียวกัน แต่ดูเหมือนว่า argv จะเป็นวิธีแก้ปัญหา เช่นเดียวกับในหัวข้ออื่นๆ เช่นกัน   -  person Roberto    schedule 27.05.2015
comment
คุณตรวจสอบคีย์รีจิสทรีที่ฉันกล่าวถึงแล้วหรือยัง? คุณได้พิสูจน์แล้วว่า EXE ของคุณแยกวิเคราะห์บรรทัดคำสั่งอย่างถูกต้องโดยการทดสอบด้วยตนเองในพร้อมท์คำสั่ง นั่นหมายความว่าปัญหาคือ Explorer ไม่ส่งไฟล์เป้าหมาย "%1" บนบรรทัดคำสั่ง ดังนั้นหนึ่งในหลาย ๆ แห่งที่สามารถกำหนดค่าได้ในรีจิสทรีจึงมีการกำหนดค่าไม่ถูกต้อง   -  person Eryk Sun    schedule 27.05.2015
comment
ฉันตรวจสอบรีจิสทรีแล้วและมีโฟลเดอร์สำหรับนามสกุล (*.robert) รูปภาพ: dl.dropboxusercontent.com/u/36618693/Registry.jpg ด้วย ขอบคุณมากสำหรับความช่วยเหลือของคุณจนถึงตอนนี้!   -  person Roberto    schedule 27.05.2015
comment
ฉันค้นหาส่วนขยาย .robert ด้วย Default Program Editor และสังเกตเห็นว่ากล่องเส้นทางแสดงสิ่งต่อไปนี้: [ เส้นทางไปยังโปรแกรมของฉัน %1 ] ซึ่งจะต้องถูกต้อง   -  person Roberto    schedule 27.05.2015


คำตอบ (1)


ตอนนี้ฉันได้ลองเพิ่มบรรทัด input ที่ส่วนท้ายของสคริปต์เพื่อป้องกันไม่ให้ปิดทันที และฉันสังเกตเห็นข้อผิดพลาดในแผง: "ImportError: ไม่มีโมดูลชื่อ 'ctypes'". การค้นหาบางอย่างแสดงให้เห็นว่านี่เป็นข้อบกพร่องใน py2exe: วิธีหยุดโปรแกรม Python ที่คอมไพล์ใน py2exe ไม่ให้แสดง ImportError: ไม่มีชื่อโมดูล 'ctypes' วิธีแก้ปัญหาดังกล่าวได้แก้ไขข้อผิดพลาดและหลังจากสร้าง *.exe ใหม่ที่ส่งผ่านในเส้นทางของไฟล์แล้วใช้งานได้! ดังนั้นมันจึงเป็นข้อผิดพลาดของ py2exe มาตลอด...

person Roberto    schedule 27.05.2015