2011-07-10 17 views
5

WindowsXP'deyim. Bu herhangi bir süreci etkiliyor gibi görünüyor, ancak bunu göstermek için Python3.2 kullanacağım. Bir komut dosyası, 'filter.py':stdin, Windows ftp ve assoc mekanizmasını kullanan herhangi bir işlem için eksik.

import sys 
for line in sys.stdin: 
    print(line) 

şöyle Koşu:

echo hello | filter.py 

böyle Aralar: Tabii

Traceback (most recent call last): 
    File "F:\Documents and Settings\jhartley\docs\projects\filtercwd\filter.py", line 3, in <module> 
    for line in sys.stdin: 
TypeError: 'NoneType' object is not iterable 

, bir baskı ekleyerek değerini keşfetmek için sys.stdin, (ve NoneType öğesinin yok) olduğunu bildirir.

Alternatif olarak şu şekilde çalışıyor:

echo hello | python filter.py 

(python'un açık bir şekilde çağrılmasıyla) mükemmel bir şekilde çalışır. '

> assoc .py 
.py=Python.File 
> ftype Python.File 
Python.File="F:\Python32\python.exe" "%1" %* 

(bu aynı:

Benim .py dosyaları assoc ve FTYPE mekanizmasını (Windows belirli programları kullanarak yürütülecek belirli dosya adı uzantılarını ilişkilendiren yolu) kullanarak Python kullanarak yürütmek için bağladım python.exe 'bu, yolumun en ileri noktasındadır.

Güncelleme: Bu bir Python olayı değil. Ben filtre.sh, cygwin bash kullanarak çalıştırmak, aynı şey olur. Açıkça çalışan 'echo merhaba | bash filter.sh 'çalışıyor, ancak' echo merhaba | Assoc ve ftype mekanizması ile bash kullanarak filter.sh yürüten filter.sh ','/dev/stdin: Böyle bir dosya veya dizin yok 'ile başarısız olur.

Bu açık 'python'u tüm komut satırlarına eklemek zorunda mıyım? Ayrıca, neden kırıldığını merak ediyorum. Bu sadece benim makinemin kendine özgü bir özelliği mi yoksa başkaları da bunu görüyor mu?

cevap

1

Ne echo kullanıyorsunuz? Yolunuzda UNIX tarzı echo yardımcı programınız var mı, yoksa sadece Microsoft'u kullanıyorsunuz (bunu yapmak istediğinizi yapmıyorsunuz)? Komut isteminde echo on yazarsanız ne olur?

Windows 7'de çalışıyorum ve bunu yeniden oluşturamadım. Yolumda bir UNIX tarzı echo yardımcı programı var. Ben test.rb içinde installed ruby 1.9.2 ve yazılı minik program var:

  1. test.rb
  2. ruby test.rb
  3. echo hello | test.rb
  4. echo hello | ruby test.rb
: Ben bu komutları herhangi yazarken

while s = $stdin.gets 
    print s 
end 

programı çalıştırır

1 ve 2 numaralı komutlar aynı davranır. Komut 3 ve 4 aynı şekilde davranır. Her şey beklediğim gibi davranır.

DÜZENLEME 1:

C:\Users\David\Documents\scraps\test_ruby>ls 
test.rb 

C:\Users\David\Documents\scraps\test_ruby>assoc .rb 
File association not found for extension .rb 

C:\Users\David\Documents\scraps\test_ruby>echo hi | test.rb 
hi 

Ben FTYPE hakkında çok şey bilmiyorum ama belki sisteminizde yakut yüklemek ve benim örnek program için çalıştığını görmek gerekir: Burada koştum bazı komutları bulabilirsiniz sen.

+0

Hey. Cevap için teşekkürler.Yanım da dahil olmak üzere benim PATH'mdaki tüm cygwin ikili dosyalarına sahibim. Belki de bir WindowsXP meselesi. Komik Daha önce fark etmedim. Bunu, Windows'un diğer tatları üzerinde deneyeceğim ve rapor vereceğim. –

+0

Oh! Ve, ftype ve ruby ​​ile .rb dosyalarını ilişkilendiren ayarlarınızı assoc göstermenizi isteyebilir miyim? Belki de benimkini delirtirim. yani, "assoc .rb" ve "ftype X" çıkışları, X'in assoc komutundan çıktısıdır. Teşekkürler! –

+0

Bu bilgileri eklemek için cevapla güncellendi. Denemelerimi normal Microsoft Komut İsteminde yaptım. Hangi kabuğunu kullanıyorsun? –