Windows'ta Python betikleri nasıl çalıştırılır?


92

Basit bir betiğim var blah.py (Python 2 kullanarak):

import sys
print sys.argv[1]

Komut dosyamı şu şekilde çalıştırırsam:

python c:/..../blah.py argument

Argüman yazdırır, ancak komut dosyasını şu şekilde çalıştırırsam:

blah.py argument

Hata oluştu:

IndexError ...

Dolayısıyla argümanlar betiğe geçmez.

PATH içindeki python.exe. Blah.py içeren klasör PATH içinde de.
python.exe, * .py dosyalarını yürütmek için varsayılan programdır.

Sorun nedir?


3
bir kod parçacığı göndermek size yardımcı olabilir.
jldupont

Kristal topu olmayan adam zaten bir çözüm verdi =) print sys.argv [1] bu hatayı üretir.
ton4eg

Python'un birden fazla sürümü kuruluysa, bu stackoverflow.com/questions/1934675/… 'e ihtiyacınız olabilir .
laike9m

Python'a komut dizimi kayıt defterinden çalıştırmasını manuel olarak söyle: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" `

Yanıtlar:


144

Bir komut dosyasını önüne "python" yazmadan çalıştırdığınızda, Windows'un programı nasıl çağırdığı hakkında iki şeyi bilmeniz gerekir. Birincisi, Windows'un ne tür bir dosya olduğunu düşündüğünü bulmaktır:

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

Ardından, Windows'un bu uzantı ile işleri nasıl yürüttüğünü bilmeniz gerekir. "Python.File" dosya türü ile ilişkilidir, bu nedenle bu komut ne yapacağını gösterir:

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

Dolayısıyla, makinemde "blah.py foo" yazdığımda, tam olarak yazdığımdan daha fazla sonuç farkı olmadan bu tam komutu çalıştıracak:

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

Tırnak işaretleri dahil aynı şeyi yazarsanız, yalnızca "blah.py foo" yazdığınızdakiyle aynı sonuçları alırsınız. Şimdi probleminizin geri kalanını kendiniz için çözebilecek bir konumdasınız.

(Veya konsolda gördüklerinizin gerçek kesip yapıştır kopyaları gibi sorunuza daha yararlı bilgiler gönderin. Bu tür şeyler yapan kişilerin sorularının oylanmasını ve itibar puanlarının ve daha fazla kişinin onlara iyi cevaplarla yardımcı olma olasılığı yüksektir.

Yorumlardan Getirildi:

Assoc ve ftype doğru bilgileri gösterse bile, argümanların çıkarılması olabilir. Bu durumda yardımcı olabilecek şey, doğrudan Python için ilgili kayıt defteri anahtarlarını düzeltmektir. Yı kur

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

anahtar:

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

Muhtemelen, önceden %*eksikti. Benzer şekilde, ayarlayın

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

aynı değere. Bkz. Http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

python.exe için örnek kayıt defteri ayarı HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandKayıt defteri yolu kullanımını değişebilir python26.exeveya python.exeveya kayıt zaten hangisi.

görüntü açıklamasını buraya girin HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
Doğru bilgi gösterilse assocve ftypegösterilse bile , argümanlar çıkarılabilir. Bu durumda yardımcı olabilecek şey, doğrudan Python için ilgili kayıt defteri anahtarlarını düzeltmektir. HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\commandAnahtarı şu şekilde ayarlayın : "C:\Python26\python26.exe" "%1" %* Muhtemelen, önceden %*eksikti. Benzer şekilde, HKEY_CLASSES_ROOT\py_auto_file\shell\open\commandaynı değere ayarlayın. Bkz eli.thegreenplace.net/2010/12/14/...
parvus

5
@parvus Yorumunuz benim için nihai çözümdü. İlişkilendirmeler doğru okunsa bile, bu iki anahtarın ikisi de yanlış ayarlanmıştı.
Nathan Cox

1
HKEY_CLASSES_ROOT \ .py \ OpenWithProgids'in özellikle AppVeyor testlerimde Python komut dosyalarını çalıştırmayı denediğimde VisualStudio ile ilgili bir şeye ayarlanmasıyla ilgili sorunlar yaşıyorum. Help.appveyor.com/discussions/problems/… bakın .
Jack O'Connor

1
Benzer bir sorunum var. Anaconda varsayılan olarak% * eksik kayıt defteri anahtarı ekledi
prasad

Win10 ben yazma içinde test.py 123ve ben olsun 123olarak basılmış sys.argv[1]. Microsoft bir şeyi değiştirdi mi?
Hrvoje T

22

python dosyalarını işlemek için varsayılan uygulamayı python.exe yapmalısınız.

bir * .py dosyasına sağ tıklayın, "Birlikte Aç" iletişim kutusunu seçin. Orada "python.exe" yi seçin ve "bu programı bu dosya türü için her zaman kullan" seçeneğini işaretleyin (bunun gibi bir şey).

o zaman python dosyalarınız her zaman python.exe kullanılarak çalıştırılır


16

Ek olarak, python komut dosyalarınızı dosya adının sonuna .py(veya .pyw) yazmadan çalıştırabilmek istiyorsanız , PATHEXT ortam değişkenindeki uzantı listesine .PY(veya .PY;.PYW) eklemeniz gerekir .

Windows 7'de:

Bilgisayar üzerinde sağ tıklayın
Özellikler'i tıklatın bıraktı
Gelişmiş sistem ayarlarını tıklayın sol
Gelişmiş sekmesini tıklatın bıraktı
... Ortam değişkenleri tıklama sol
Eğer PATHEXT görene kadar "Sistem değişkenleri" altında aşağı doğru ilerleyin
sol tıklama PATHEXT üzerinde onu vurgulamak için
sol Düzenle'yi tıklayın ...
"Değişken değeri" ni ;.PY içerecek şekilde düzenleyin (End tuşu sona atlayacaktır)
sol tıklayın Tamam'ı
sol tıklayın Tamam'ı
sol tıklayın Tamam'ı tıklayın

Not 1: Komut istemi pencereleri, kapatılıp yeniden açılmadan değişikliği görmez.

Not # 2: .pyve .pywuzantılar arasındaki fark , ilkinin çalıştırıldığında bir komut istemi açması ve ikincisinin açmamasıdır.

Bilgisayarımda, ;.PY;.PYWson (en düşük öncelikli) uzantılar olarak ekledim , dolayısıyla PATHEXT'in "önce" ve "sonra" değerleri şunlardı:

önce: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

sonra .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

İşte bazı öğretici komutlar:

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:\>

4

Windows'ta Python betikleri nasıl çalıştırılır?

Sen yükleyebilir pylauncher . .Py, .pyw, .pyc, .pyo dosyalarını başlatmak için kullanılır ve birden çok Python kurulumunu destekler:

T\:> blah.py argument

PATHEXT ortam değişkeninde .py, .pyw'ye sahipseniz, .py uzantısını belirtmeden Python komut dosyanızı çalıştırabilirsiniz:

T:\> blah argument

#!Birden fazla sürüm kuruluysa, Windows'ta istenen Python sürümünü seçmek için shebang ( başlık satırı) için destek ekler . * Nix uyumlu sözdizimi kullanabilirsiniz #! /usr/bin/env python.

Sürümü açıkça belirtebilirsiniz, örneğin, en son yüklü Python 3 sürümünü kullanarak çalıştırmak için:

T:\> py -3 blah.py argument

Ayrıca sys.argvsorununuzu bir yan etki olarak düzeltmelidir .


Python Launcher beta durumundadır.
Nicolas Barbulesco

@NicolasBarbulesco: Python başlatıcısı Python 3.3'e dahildir, yani yeterince iyi
jfs

Olabilir. Ancak Python 3'ü Windows'a kurmayı başaramadım . Belki bana yardım edebilirsin.
Nicolas Barbulesco

4

Aynı sorunla karşılaştım, ancak kodumu Windows kullanıcıları için (Linux'tan geliyor) paketlemem gerektiği bağlamında. Paketim, komut satırı seçeneklerine sahip bir dizi komut dosyası içerir.

Bu komut dosyalarının Windows kullanıcılarının makinelerinde komut satırından çağırabilmeleri için uygun konuma yüklenmesine ihtiyacım var. Paket sözde kullanıcı dostu olduğundan, kullanıcılarımdan bu komut dosyalarını çalıştırmak için kayıtlarını değiştirmelerini istemek imkansız olacaktır.

Continuum'daki insanların Anaconda paketleriyle gelen Python betikleri için kullandığı bir çözüme rastladım - örnekler için Anaconda / Scripts dizininize bakın.

Bir Python betiği testiçin iki dosya oluşturun: a test.batve a test-script.py.

test.batgörünüm aşağıdaki gibi ( .batdosyalar Anaconda\Scriptsçağrı python.exebenim amaçlar için uyarlanmış bir göreli yolu ile):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py gerçek Python betiğiniz:

import sys
print sys.argv

Bu iki dosyayı yerel dizininizde bırakırsanız, .batdosya aracılığıyla Python betiğinizi şu şekilde çalıştırabilirsiniz :

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

Her iki dosyayı da PATH(örneğin Anaconda\Scripts) üzerinde bulunan bir konuma kopyalarsanız , .batsoneki bırakarak betiğinizi bile çalıştırabilirsiniz.

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

Feragatname: Neler olduğu ve bunun nasıl çalıştığı hakkında hiçbir fikrim yok ve herhangi bir açıklama yapmaktan memnun olurum.


.batHer Python betiği için bir sarmalayıcı oluşturmak hantal ve gereksizdir. Bunu tavsiye etmezdim.
2017

2

On Windows'un ,

To "piton" yazmadan bir piton modülünü çalıştırmak ,

-> Herhangi bir python (*. Py) dosyasına sağ tıklayın

-> Açma özelliğini "python.exe" olarak ayarlayın

-> "Bu dosya türü için her zaman bu programı kullan" seçeneğini işaretleyin

-> python.exe'nin yolunu değişken ortama ekleyin, örneğin C: \ Python27'yi PATH ortam değişkenine ekleyin.

To ".py" uzantısı yazmadan bir piton modülü çalıştırın

-> PATHEXT sistem değişkenini düzenleyin ve listeye ".PY" uzantısını ekleyin.


1

Burada inanılmaz derecede faydalı bir cevap buldum : cmd'de farklı python sürümleri nasıl çalıştırılır?

Bir süre önce Python 3.3'e giren Windows için Python Launcher yardımcı programını kullanmanızı öneririm. Python 2 ve 3'ün önceki sürümleriyle kullanmak için doğrudan yazarın web sitesinden manuel olarak da indirebilir ve yükleyebilirsiniz.

Nasıl elde ettiğinizden bağımsız olarak, kurulumdan sonra kendisini tüm standart Python dosya uzantılarıyla (yani .py, .pyw, .pyc ve .pyo dosyaları) ilişkilendirecektir. Yalnızca komut isteminde hangi sürümün kullanıldığını açıkça kontrol etmekle kalmayacak, aynı zamanda Linux / Unix-y shebang #! / Usr / bin / env pythonX yorumlarını ekleyerek komut dosyası bazında komut dosyası temelinde de kontrol edebileceksiniz. Python komut dosyalarınızın başlangıcı.

JF Sebastian'ın önerdiği gibi, Windows için Python Launcher, Windows'ta farklı Python sürümünü başlatmak için en iyi ve varsayılan seçimdir. Eskiden üçüncü taraf bir araçtı, ancak şimdi resmi olarak Python 3.3'ten beri destekleniyor.

Sürüm 3.3'teki yenilikler.

Windows için Python başlatıcısı, farklı Python sürümlerinin konumlandırılmasına ve yürütülmesine yardımcı olan bir yardımcı programdır. Komut dosyalarının (veya komut satırının) belirli bir Python sürümü için bir tercih belirtmesine izin verir ve bu sürümü bulup çalıştırır.

Bu harika bir araçtır, sadece kullanın!


0

Herhangi bir haritadan python.exe'yi çalıştırabilir misiniz? Yoksa, PATH ortamında python.exe için uygun değerlere sahip olup olmadığınızı kontrol edin.

Blah.py ile aynı dizinde misiniz? Bunu komut vererek kontrol edin -> blah.py dosyasını düzenleyin ve bu dosyayı açıp açamayacağınızı kontrol edin

DÜZENLE:

Bu durumda yapamazsınız. ( python arg , python.exe'yi çalıştırmak istediğiniz komut dosyasının dosya adı olduğunu varsaydığı bazı parametreleri katarak çağırmanız anlamına gelir)

Yol haritanızda yarasa dosyası beyaz çizgiler oluşturabilir ve .bat dosyasını çalıştırabilirsiniz.

Örnek:
Yol haritalarından birinde blah.py.bat Düzenleme dosyası oluşturun ve satırı koyun

python C:\Somedir\blah.py

Yarasa dosyalarını çalıştırırken .bat uzantısı koymanıza gerek olmadığı için artık blah.py'yi herhangi bir yerden çalıştırabilirsiniz.


PATH içindeki python. Ve blah.py dosyasını PATH içinde de içeren dizin. Ana fikir, python betiğini tam yolunu yazmadan yürütmektir. Ama şimdi tartışmalarla ilgili sorunlarım var.
ton4eg

3
Ralu, bu şekilde bir python betiğini çalıştırmak için bir toplu iş dosyasına ihtiyacın yok. Yürütülebilir uzantılar olarak .py ve .pyw'yi dahil etmek için PATHEXT ortam varlığını kullanın. Bu değişken, ayrıca .bat belirtmeniz gerekmemesinin nedenidir.
Todd

0

Anladığım buysa, şöyle:

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

Python.exe'yi KOPYALAYIN (silinmeyin) ve py.exe olarak yeniden adlandırın ve çalıştırın:

py filename.py

0

Sadece şu komutu çalıştırın:

C:>python .\file_name.py

Dosya adının aynı klasör içinde olduğunu ve Python'un ortam değişkenlerine zaten eklenmiş olduğunu varsayarsak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.