Saya memiliki skrip sederhana blah.py (menggunakan Python 2):
import sys
print sys.argv[1]
Jika saya menjalankan skrip saya dengan:
python c:/..../blah.py argument
Ini mencetak argumen tetapi jika saya mengeksekusi skrip dengan:
blah.py argument
kesalahan terjadi:
IndexError ...
Jadi argumen tidak lolos ke skrip.
python.exe di PATH. Folder dengan blah.py juga di PATH.
python.exe adalah program default untuk mengeksekusi file * .py.
Apa masalahnya?
python
windows
scripting
command-line
file-association
ton4eg.dll
sumber
sumber
Jawaban:
Saat Anda menjalankan skrip tanpa mengetik "python" di depan, Anda perlu mengetahui dua hal tentang bagaimana Windows menjalankan program. Pertama adalah mencari tahu jenis file apa yang menurut Windows itu:
Selanjutnya, Anda perlu tahu bagaimana Windows menjalankan sesuatu dengan ekstensi itu. Ini terkait dengan jenis file "Python.File", jadi perintah ini menunjukkan apa yang akan dilakukannya:
Jadi di mesin saya, saat saya mengetik "blah.py foo", perintah ini akan dijalankan persis seperti ini, tanpa perbedaan hasil dibandingkan jika saya mengetik sendiri seluruhnya:
Jika Anda mengetik hal yang sama, termasuk tanda kutip, Anda akan mendapatkan hasil yang sama dengan saat Anda mengetik "blah.py foo". Sekarang Anda berada dalam posisi untuk mencari tahu sendiri sisa masalah Anda.
(Atau poskan informasi yang lebih berguna dalam pertanyaan Anda, seperti salinan potong-dan-tempel yang sebenarnya dari apa yang Anda lihat di konsol. Perhatikan bahwa orang yang melakukan hal semacam itu mendapatkan pertanyaan mereka dipilih, dan mereka mendapatkan poin reputasi, dan lebih banyak orang cenderung membantu mereka dengan jawaban yang baik.)
Didatangkan Dari Komentar:
Bahkan jika assoc dan ftype menampilkan informasi yang benar, mungkin saja argumen tersebut dilucuti. Apa yang dapat membantu dalam kasus itu adalah langsung memperbaiki kunci registri yang relevan untuk Python. Mengatur
kunci untuk:
"C:\Python26\python26.exe" "%1" %*
Kemungkinan, sebelumnya,
%*
hilang. Demikian pula, setdengan nilai yang sama. Lihat http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
Lintasan registri mungkin berbeda, menggunakanpython26.exe
ataupython.exe
atau mana saja yang sudah ada di dalam registri.HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
sumber
assoc
danftype
menampilkan informasi yang benar, mungkin saja argumen tersebut dilucuti. Apa yang dapat membantu dalam kasus itu adalah langsung memperbaiki kunci registri yang relevan untuk Python. SetelHKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
kunci ke:"C:\Python26\python26.exe" "%1" %*
Kemungkinan, sebelumnya,%*
hilang. Demikian pula, setelHKEY_CLASSES_ROOT\py_auto_file\shell\open\command
ke nilai yang sama. Lihat eli.thegreenplace.net/2010/12/14/…test.py 123
dan saya123
dicetak sebagaisys.argv[1]
. Apakah Microsoft mengubah sesuatu?Anda harus membuat aplikasi default untuk menangani file python menjadi python.exe.
klik kanan file * .py, pilih dialog "Open With". Di sana pilih "python.exe" dan centang "selalu gunakan program ini untuk jenis file ini" (sesuatu seperti itu).
maka file python Anda akan selalu dijalankan menggunakan python.exe
sumber
Selain itu, jika Anda ingin menjalankan skrip python tanpa mengetik
.py
(atau.pyw
) di akhir nama file, Anda perlu menambahkan.PY
(atau.PY;.PYW
) ke daftar ekstensi di variabel lingkungan PATHEXT.Di Windows 7:
klik kanan pada Komputer
klik
kiri Properties klik kiri Advanced system settings
klik
kiri tab Advanced klik kiri Variabel Lingkungan ... di
bawah "variabel sistem" gulir ke bawah sampai Anda melihat PATHEXT
klik kiri pada PATHEXT untuk menyorotnya ke
kiri- klik Edit ...
Edit "Nilai variabel" sehingga berisi
;.PY
(tombol Putus akan melompat ke akhir)klik
kiri OK klik
kiri OK klik kiri OK
Catatan # 1: Jendela prompt perintah tidak akan melihat perubahan tanpa ditutup dan dibuka kembali.
Catatan # 2: Perbedaan antara ekstensi
.py
dan.pyw
adalah ekstensi dan ekstensi pertama membuka prompt perintah saat dijalankan, dan ekstensi terakhir tidak.Di komputer saya, saya menambahkan
;.PY;.PYW
sebagai ekstensi terakhir (prioritas terendah), jadi nilai "sebelum" dan "setelah" dari PATHEXT adalah:sebelum:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
setelah
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
Berikut beberapa perintah instruktif:
C:\>echo %pathext% .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW C:\>assoc .py .py=Python.File C:\>ftype Python.File Python.File="C:\Python32\python.exe" "%1" %* C:\>assoc .pyw .pyw=Python.NoConFile C:\>ftype Python.NoConFile Python.NoConFile="C:\Python32\pythonw.exe" "%1" %* C:\>type c:\windows\helloworld.py print("Hello, world!") # always use a comma for direct address C:\>helloworld Hello, world! C:\>
sumber
Anda bisa memasang pylauncher . Ini digunakan untuk meluncurkan file .py, .pyw, .pyc, .pyo dan mendukung beberapa instalasi Python:
Anda dapat menjalankan skrip Python Anda tanpa menentukan ekstensi .py jika Anda memiliki .py, .pyw dalam variabel lingkungan PATHEXT:
Ini menambahkan dukungan untuk shebang (
#!
baris header) untuk memilih versi Python yang diinginkan di Windows jika Anda memiliki beberapa versi yang diinstal. Anda dapat menggunakan sintaks yang kompatibel dengan * nix#! /usr/bin/env python
.Anda dapat menentukan versi secara eksplisit misalnya, untuk menjalankan menggunakan versi Python 3 yang terinstal terbaru:
T:\> py -3 blah.py argument
Ini juga harus memperbaiki
sys.argv
masalah Anda sebagai efek samping.sumber
Saya mengalami masalah yang sama tetapi dalam konteks perlu mengemas kode saya untuk pengguna Windows (berasal dari Linux). Paket saya berisi sejumlah skrip dengan opsi baris perintah.
Saya membutuhkan skrip ini untuk dipasang di lokasi yang sesuai pada mesin pengguna Windows sehingga mereka dapat memanggilnya dari baris perintah. Karena paket tersebut seharusnya ramah pengguna, meminta pengguna saya untuk mengubah registri mereka untuk menjalankan skrip ini tidak mungkin dilakukan.
Saya menemukan solusi yang digunakan oleh orang-orang di Continuum untuk skrip Python yang disertakan dengan paket Anaconda mereka - lihat direktori Anaconda / Skrip Anda sebagai contoh.
Untuk skrip Python
test
, buat dua file: atest.bat
dan atest-script.py
.test.bat
terlihat sebagai berikut (.bat
file dalamAnaconda\Scripts
panggilanpython.exe
dengan jalur relatif yang saya sesuaikan untuk tujuan saya):@echo off set PYFILE=%~f0 set PYFILE=%PYFILE:~0,-4%-script.py "python.exe" "%PYFILE%" %*
test-script.py
adalah skrip Python Anda yang sebenarnya:import sys print sys.argv
Jika Anda meninggalkan kedua file ini di direktori lokal Anda, Anda dapat menjalankan skrip Python Anda melalui
.bat
file dengan melakukantest.bat hello world ['C:\\...\\test-scripy.py', 'hello', 'world']
Jika Anda menyalin kedua file ke lokasi yang ada di Anda
PATH
(sepertiAnaconda\Scripts
), Anda bahkan dapat menjalankan skrip Anda dengan meninggalkan.bat
sufikstest hello world ['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']
Penafian: Saya tidak tahu apa yang sedang terjadi dan bagaimana ini bekerja dan sangat menghargai penjelasan apa pun.
sumber
.bat
pembungkus untuk setiap skrip Python itu kikuk dan berlebihan. Saya tidak akan merekomendasikan ini.Di Windows ,
Untuk menjalankan modul python tanpa mengetik "python" ,
-> Klik kanan file python (*. Py) apa pun
-> Setel buka dengan properti ke "python.exe"
-> Centang "selalu gunakan program ini untuk jenis file ini"
-> Tambahkan jalur python.exe ke lingkungan variabel misalnya tambahkan C: \ Python27 ke variabel lingkungan PATH.
Untuk menjalankan modul python tanpa mengetik ekstensi ".py"
-> Edit variabel sistem PATHEXT dan tambahkan ekstensi ".PY" ke daftar.
sumber
Menemukan jawaban yang sangat berguna di sini : Bagaimana cara menjalankan versi python yang berbeda di cmd?
Seperti yang disarankan JF Sebastian, Python Launcher untuk Windows adalah pilihan terbaik dan default untuk meluncurkan versi Python yang berbeda di Windows. Ini dulunya adalah alat pihak ketiga, tetapi sekarang secara resmi didukung sejak Python 3.3.
Ini adalah alat yang hebat, gunakan saja!
sumber
Bisakah Anda mengeksekusi python.exe dari peta mana pun? Jika tidak, periksa jika Anda memiliki nilai yang sesuai untuk python.exe di lingkungan PATH
Apakah Anda berada di direktori yang sama dengan blah.py. Periksa ini dengan mengeluarkan perintah -> edit blah.py dan periksa apakah Anda dapat membuka file ini
EDIT:
Dalam hal ini Anda tidak bisa. ( python arg berarti Anda memanggil python.exe dengan beberapa parameter yang dianggap python sebagai nama file dari skrip yang ingin Anda jalankan)
Anda dapat membuat file bat dengan garis putih di peta jalur Anda dan menjalankan file bat
Contoh:
Di salah satu peta Path buat blah.py.bat Edit file dan taruh baris
Anda sekarang dapat menjalankan blah.py dari mana saja, karena Anda tidak perlu menggunakan ekstensi .bat saat menjalankan file bat
sumber
Jika itu yang saya pahami, seperti ini:
COPY (bukan hapus) python.exe dan ganti namanya menjadi py.exe dan jalankan:
sumber
Cukup jalankan perintah:
Dengan asumsi nama file berada dalam folder yang sama dan Python telah ditambahkan ke variabel lingkungan.
sumber