Bagaimana cara mengeksekusi skrip Python di Windows?

92

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?

ton4eg.dll
sumber
3
memposting cuplikan kode dapat membantu kami membantu Anda.
jldupont
Manusia tanpa bola kristal telah memberikan solusi =) print sys.argv [1] menghasilkan kesalahan ini.
ton4eg
Jika Anda menginstal beberapa versi Python, Anda mungkin memerlukan stackoverflow.com/questions/1934675/… ini .
laike9m
Beri tahu python secara manual untuk menjalankan skrip saya dari registri: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" `

Jawaban:

144

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:

    C: \> assoc .py
    .py = Python.File

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:

    C: \> ftype Python.File
    Python.File = "c: \ python26 \ python.exe" "% 1"% *

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:

    "c: \ python26 \ python.exe" "blah.py" foo

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

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

kunci untuk:

"C:\Python26\python26.exe" "%1" %*

Kemungkinan, sebelumnya, %*hilang. Demikian pula, set

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

dengan nilai yang sama. Lihat http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

contoh setting registry untuk python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandLintasan registri mungkin berbeda, menggunakan python26.exeatau python.exeatau mana saja yang sudah ada di dalam registri.

masukkan deskripsi gambar di sini HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

Peter Hansen
sumber
30
Sekalipun assocdan ftypemenampilkan informasi yang benar, mungkin saja argumen tersebut dilucuti. Apa yang dapat membantu dalam kasus itu adalah langsung memperbaiki kunci registri yang relevan untuk Python. Setel HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\commandkunci ke: "C:\Python26\python26.exe" "%1" %* Kemungkinan, sebelumnya, %*hilang. Demikian pula, setel HKEY_CLASSES_ROOT\py_auto_file\shell\open\commandke nilai yang sama. Lihat eli.thegreenplace.net/2010/12/14/…
parvus
5
@parvus Komentar Anda adalah solusi akhir bagi saya. Bahkan dengan asosiasi membaca dengan benar, kedua kunci ini tidak disetel dengan benar.
Nathan Cox
1
Saya juga mengalami masalah dengan HKEY_CLASSES_ROOT \ .py \ OpenWithProgids yang disetel ke sesuatu yang berhubungan dengan VisualStudio, khususnya ketika saya mencoba menjalankan skrip Python dalam tes AppVeyor saya. Lihat help.appveyor.com/discussions/problems/… .
Jack O'Connor
1
Saya memiliki masalah serupa. Anaconda secara default menambahkan kunci registri dengan% * yang hilang
prasad
Di Win10 saya menulis test.py 123dan saya 123dicetak sebagai sys.argv[1]. Apakah Microsoft mengubah sesuatu?
Hrvoje T
22

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

santosc
sumber
16

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 .pydan .pywadalah ekstensi dan ekstensi pertama membuka prompt perintah saat dijalankan, dan ekstensi terakhir tidak.

Di komputer saya, saya menambahkan ;.PY;.PYWsebagai 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:\>
Dave Burton
sumber
4

Bagaimana cara mengeksekusi skrip Python di Windows?

Anda bisa memasang pylauncher . Ini digunakan untuk meluncurkan file .py, .pyw, .pyc, .pyo dan mendukung beberapa instalasi Python:

T\:> blah.py argument

Anda dapat menjalankan skrip Python Anda tanpa menentukan ekstensi .py jika Anda memiliki .py, .pyw dalam variabel lingkungan PATHEXT:

T:\> blah argument

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.argvmasalah Anda sebagai efek samping.

jfs
sumber
Peluncur Python dalam status beta.
Nicolas Barbulesco
@NicolasBarbulesco: Peluncur Python disertakan dalam Python 3.3 , artinya cukup bagus
jfs
Mungkin. Tetapi saya tidak berhasil menginstal Python 3 di Windows . Mungkin Anda bisa membantu saya di sini.
Nicolas Barbulesco
4

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: a test.batdan a test-script.py.

test.batterlihat sebagai berikut ( .batfile dalam Anaconda\Scriptspanggilan python.exedengan 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 .batfile dengan melakukan

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

Jika Anda menyalin kedua file ke lokasi yang ada di Anda PATH(seperti Anaconda\Scripts), Anda bahkan dapat menjalankan skrip Anda dengan meninggalkan .batsufiks

test 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
Membuat .batpembungkus untuk setiap skrip Python itu kikuk dan berlebihan. Saya tidak akan merekomendasikan ini.
tripleee
2

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.

Aspak Rogatiya
sumber
1

Menemukan jawaban yang sangat berguna di sini : Bagaimana cara menjalankan versi python yang berbeda di cmd?

Saya akan menyarankan menggunakan utilitas Python Launcher for Windows yang diperkenalkan ke Python 3.3 beberapa waktu lalu. Anda juga dapat mengunduh dan menginstalnya secara manual langsung dari situs web pembuatnya untuk digunakan dengan versi Python 2 dan 3 sebelumnya.

Terlepas dari bagaimana Anda mendapatkannya, setelah penginstalan akan mengasosiasikan dirinya dengan semua ekstensi file Python standar (yaitu file .py, .pyw, .pyc, dan .pyo). Anda tidak hanya dapat secara eksplisit mengontrol versi mana yang digunakan pada command-prompt, tetapi juga berdasarkan script-by-script dengan menambahkan Linux / Unix-y shebang #! / Usr / bin / env pythonX di awal skrip Python Anda.

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.

Baru di versi 3.3.1

Peluncur Python untuk Windows adalah utilitas yang membantu lokasi dan eksekusi berbagai versi Python. Ini memungkinkan skrip (atau baris perintah) untuk menunjukkan preferensi untuk versi Python tertentu, dan akan mencari dan menjalankan versi itu.

Ini adalah alat yang hebat, gunakan saja!

laike9m
sumber
0

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

python C:\Somedir\blah.py

Anda sekarang dapat menjalankan blah.py dari mana saja, karena Anda tidak perlu menggunakan ekstensi .bat saat menjalankan file bat

Luka Rahne
sumber
python di PATH. Dan direktori yang berisi blah.py juga di PATH. Ide utamanya adalah menjalankan skrip python tanpa menulis path lengkap ke sana. Tapi sekarang saya punya masalah dengan argumen yang lewat.
ton4eg
3
Ralu, Anda tidak memerlukan file batch untuk menjalankan skrip python dengan cara ini. Gunakan lingkungan PATHEXT var untuk menyertakan .py dan .pyw sebagai ekstensi yang dapat dieksekusi. Variasi ini adalah mengapa Anda tidak perlu menentukan .bat juga.
Todd
0

Jika itu yang saya pahami, seperti ini:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

COPY (bukan hapus) python.exe dan ganti namanya menjadi py.exe dan jalankan:

py filename.py
Lucas Paz
sumber
0

Cukup jalankan perintah:

C:>python .\file_name.py

Dengan asumsi nama file berada dalam folder yang sama dan Python telah ditambahkan ke variabel lingkungan.

Mwiza
sumber