2013-11-25 18 views
7

Bunu yapan herhangi bir kişi olmadığından emin değilim, ancak sorun giderme ve/veya alternatif yöntemler için öneriler alacağım.pschon komut dosyasını çalıştıran pscp'yi çalıştıran sorunlar pscp

Üzerinde birkaç zamanlanmış görev çalıştırdığım bir Windows 2008 sunucum var. Bu görevlerden biri, bir linux kutusuna giriş yapmak için pscp kullanan yeni bir python betiğidir, yeni dosyaları kontrol eder ve yeni bir şey varsa bunları C: sürücüsündeki bir yerel dizine kopyalar. Ben de önemli noktalarda komut dosyasına giriş yaptım ve logging.basicConfig(level=DEBUG) kullanıyorum.

Komutu, command = 'pscp -pw xxxx [email protected]:/ c:\local_dir' değişkenini kullanarak oluşturdum ve sonra komutu çalıştırmak için subprocess.call(command) kullanın.

Şimdi sıra garip kısım. Komut dosyasını komut satırından el ile çalıştırırsam, iyi çalışır. Yeni dosyalar indirilir ve işlenir. Ancak, Görev Zamanlayıcısı komut dosyasını çalıştırırsa, yeni dosya indirilmez. Komut dosyası aynı kullanıcı altında çalışıyor ancak farklı sonuçlar veriyor.

Komut dosyası ve linux kutusu tarafından oluşturulan günlük dosyalarına göre, komut dosyası başarıyla linux kutusuna giriş yapar. Ancak, yeni dosyalar olmasına rağmen hiçbir dosya indirilmez. Yine, komut satırından çalıştırdığımda dosyalar indiriliyor.

Herhangi bir fikrin var mı? öneriler, alternatif yöntemler?

Teşekkürler.

+0

teşekkür ederiz. Her ikiniz de haklı çıkıyor. Görev Zamanlayıcısı iki şekilde gariptir: İlk önce; eşlenmiş sürücülerden hoşlanmaz. UNC referansları ile iyi çalışıyor. İkinci; her şey için tam yol referansını sever. Dosyalar, komutlar, komut dosyalarındaki sözdizimi, her şey. Aslında, bu iki tekniği kullanmak benim problemimi nasıl çözdüğümdür. Şimdi tek sorunum, her iki çalışmadan beri hangi tıklamanın düzeltileceğine karar vermek. – user1070061

cevap

9

Linux VM'de bir MS Access veritabanını açmaya çalışırken aynı sorunu yaşadım. Komutu Windows 7 komut isteminde çalıştırarak çalıştı ancak Görev Zamanlayıcısı'nda çalışmadı. Görev Zamanlayıcı ile veritabanını bulur ve var olduğunu doğrular ama tabloları kendi içinde döndürmez.

çözüm Görev Zamanlayıcı/c piton C argümanlar ile Program/Script gibi cmd olarak devam etmesi için oldu: \ yol \ \ olarak script.py (altında Ekle argümanlar (opsiyonel)).

Bunun neden çalıştığını anlatamam ama sorunumu çözdüm.

+0

Bir çekicilik gibi çalışır !! –

+3

bu da benim için çalışmıyor. Çalıştığım her şey, Run'a bastığımda hiçbir şey yapmaz. > :( – endolith

+0

Her zaman komut dosyası çalıştırıldığında sinir bozucu "taskeng.exe" penceresini nasıl önleyebilirim (komut dizim her 15 dakikada bir çalışır)? – Danijel

1

Benzer bir sorun yaşıyorum. Test sırasında, alt işlemli herhangi bir çağrı tipinin görev zamanlayıcısında çalıştırıldığında python komut dosyasını durdurduğunu ancak komut satırında çalışırken iyi çalıştığını fark ettim.

import subprocess 

print('Start') 
test = subprocess.check_output(["dir"], shell=True) 
print('First call finished') 

komut satırında çalışacak bu çıkışlar:

Start 
First call finished 

görev zamanlayıcı gelen çalıştırdığınızda çıkışı:

Start 

koşuyorum görev zamanlayıcı çıktı alabilmek için python betiği aşağıdaki gibi bir toplu iş dosyasından:

Komut dosyasını hem komut satırında hem de görev zamanlayıcısı aracılığıyla toplu iş dosyasında çalıştırıyorum.

1

Brad'in cevabı doğru. Alt işlemin çalışması için kabuk bağlamına ihtiyacı vardır ve görev yöneticisi bu olmadan python'u başlatabilir. Bunu yapmanın başka bir yolu, python c: \ path \ to \ script.py vb. Olarak adlandırılan görev zamanlayıcı tarafından başlatılan bir toplu iş dosyasını yapmaktır. Bunun tek farkı, bir çağrıya sahip bir komut dosyasına rastlamaktır. os içingetcwd() komut dosyasının bulunduğu her zaman kökünü alırsınız ancak görev zamanlayıcıdan cmd'ye çağrı yaptığınızda başka bir şey alırsınız.

1

Windows olay zamanlayıcısını kullanabilirsiniz. "DoSomeWork" komutunu çalıştırmak ve dosyayı içeren dizini kullanarak Başlat (isteğe bağlı) girişini doldurmak için python dosyanızı belirten bir eylem ekleyin. Örneğin, örneğin:

C: \ pythonProject \ doSomeWork.py

Sen girersiniz:

Program/Komut: doSomeWork.py (opsiyonel)

Başlangıç: C: pythonProjects \ bu cevaplar için

İlgili konular