2012-10-08 15 views
5

benim Linux masaüstünde 'test' adında bir dizin içinde şu Python komut vardır: Ben dizin ve türü içine gidersenizBaşka Dizin bir Python Senaryo içini Running

#!/usr/bin/python 

f = open('test.txt','w') 
f.write('testing the script') 

Yani /Home/Desktop/test/script.py

var ./script.py iyi çalışıyor ve test.txt dosyasını oluşturur.

Ancak bazı nedenlerden dolayı komut dosyasını Masaüstünden (/Home/Desktop) çalıştıramıyorum. Örneğin, ./test/script.py'u denedim, ancak çalışmadı.

Komut dosyasındaki dosya izinleri 755 ve 777 dizinindedir.

Herhangi bir yardım

mutluluk duyacağız.

+0

Konsolda gördüğünüz hata iletisini verebilir misiniz? – ernie

+0

Hata mesajı yok, bu yüzden komut dosyası çalıştırılıyor, ancak dosyayı oluşturamıyor. –

+0

Dosya oluşturulamadıysa, bir G/Ç hatası atmalıdır. Sanırım dosyayı yaratıyor, sadece beklediğiniz yerde değil. Ayrıca, cevabımda da belirtildiği gibi, 'w' modu dosyayı kırpır, bu nedenle dosya mevcutsa (değiştirilen zaman hariç) herhangi bir değişiklik görmezsiniz. – ernie

cevap

13

böyle mutlak yolları almak için os.path.dirname() ve __file__ kullanabilirsiniz:.

#!/usr/bin/python 

import os # We need this module 

# Get path of the current dir, then use it to create paths: 
CURRENT_DIR = os.path.dirname(__file__) 
file_path = os.path.join(CURRENT_DIR, 'test.txt') 

# Then work using the absolute paths: 
f = open(file_path,'w') 
f.write('testing the script') 

Bu şekilde, betik olarak betiği, çalıştırdığınız yerden bağımsız olarak, aynı dizin dizinindeki dosyalarda çalışacaktır.

+0

Bir çekicilik gibi çalıştım. Çok teşekkürler dostum. Bu değişiklik olmadan betik yürütüldüğümü tahmin ediyorum, ancak dosya/masaüstü/test yerine/Desktop yerine yerleştirmeye çalıştığından bu dosyayı oluşturamıyor muydu? –

+0

@DanielS: Kesinlikle! :) Yardım ettiğim için mutluyum. – Tadeck

+1

Çok teşekkür ederim. –

0

"Ve benzeri" çok fazla bir şey ifade etmiyor.

Dosya sistemindesiniz? Test dizinleri konumunuza göre ilgili konum nedir?

Tam nitelikli bir yol denediniz mi? Ör open('test.txt', 'w')open(r'./test.txt', 'w') koymak senin içinde

/home/daniel/test/script.py 
+0

Masaüstündeyim ve 'test' dizini içeride. Soruyu bu bilgiyi içerecek şekilde düzenledim. Thanks –

1

. Bu komutu çalıştırdığınızda, "piton script.py kullandığını yarayıp yaramadığına bakın

+0

Bunu mu demek istediniz: python ./test/script.py? Nedeni dediğim gibi, betiği dizinin dışından çalıştırmaya çalışıyorum. –

+0

Evet. Parametreleri "python" yürütülebilir dosyasına genelleştirebileceğinizi düşündüm. – alvonellos

+0

Gotcha. Aynı zamanda 'r' olmadan, açık (r './ test.txt', 'w') veya açık ('./ test.txt', 'w') anlamına mı geliyorsunuz? –

0

Eğer yılında yürütme Ne dizin kullanarak deneyebilirsiniz.:.?

import os 

print os.getcwd() 

çalışma dizini bunu ne düşündüğünü olduğunu doğrulamak için olduğu

1

Eğer cwd'niz /Desktop/test ise ve sonra ./test/script.py'u çalıştırmayı denerseniz, /Desktop/test/test/script.py adresinde bir betik çalıştırmaya çalışıyorsunuz. Muhtemelen, sadece ./script.py yapmak istediniz. As

bir hata komut satırından var mesajı yerine sadece komut çalışıyorsa "işe yaramadı"

söyleyerek ve hiçbir şey sağlanan olsaydı kenara, sorunuz daha yararlı olurdu konsol yankılandı, büyük olasılıkla çalışıyor. Not opening a file in 'w' mode truncates the file. Belki bir + kullanmak ister misin?

+0

Artık fark ettiğim bir hata iletisi, komut dosyasının çalıştırıldığı anlamına gelmelidir, ancak dosya açılmıyor/oluşturulmuyor, değil mi? –

+0

@DanielS, tıpkı tıpkı bir akıl sağlığı kontrolü için yazılı bir beyanda bulunmaya değer olabilir. . .does test.txt var ve izinleri nelerdir? – ernie

+0

Neler olup bittiğimi anlamaya çalışıyorum. –