2011-07-10 16 views
5

Tôi đang sử dụng WindowsXP. Điều này dường như ảnh hưởng đến bất kỳ quá trình nào, nhưng tôi sẽ sử dụng Python3.2 để chứng minh nó. Một kịch bản, 'filter.py':stdin cho bất kỳ quy trình I đường ống nào sử dụng Windows ftype và cơ chế assoc để chọn đúng thực thi

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

Chạy nó như thế này:

echo hello | filter.py 

Breaks như thế này:

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 

đủ chắc, thêm một bản in để khám phá giá trị của sys.stdin báo cáo rằng nó là None (và của NoneType.)

Hoặc, hãy chạy nó như sau:

echo hello | python filter.py 

(với cách khai thác rõ ràng của python) hoạt động hoàn toàn tốt.

file py My đang nối để thực hiện sử dụng Python sử dụng các PGS và cơ chế ftype (cách Windows liên kết mở rộng tên file cụ thể được thực hiện bằng các chương trình cụ thể):

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

(này là như nhau ' python.exe 'đó là quan trọng nhất trên con đường của tôi)

Cập nhật: Đây không phải là một điều Python. Điều tương tự cũng xảy ra nếu tôi tạo filter.sh, chạy bằng cách sử dụng bash Cygwin. Chạy một cách rõ ràng 'echo hello | bash filter.sh 'hoạt động tốt, nhưng' echo hello | filter.sh 'thực thi filter.sh sử dụng bash thông qua cơ chế assoc và ftype, không thành công với'/dev/stdin: Không có tệp hoặc thư mục nào '.

Vì vậy, tôi có phải thêm "python" rõ ràng này vào tất cả các dòng lệnh của mình không? Thêm vào đó, tôi tò mò về lý do tại sao nó phá vỡ. Nó chỉ là một số đặc thù của cỗ máy của tôi, hay những người khác cũng thấy điều này?

Trả lời

1

Bạn đang sử dụng những gì echo? Bạn có tiện ích echo theo phong cách UNIX trên đường dẫn của mình hay bạn chỉ đang sử dụng tiện ích Microsoft (không làm những gì bạn muốn)? Điều gì xảy ra nếu bạn nhập echo on tại dấu nhắc lệnh?

Tôi đang chạy trong Windows 7 và không thể tái tạo điều này. Tôi có tiện ích echo kiểu UNIX trên đường dẫn của mình. Tôi có installed ruby 1.9.2 và chương trình nhỏ viết bằng test.rb:

while s = $stdin.gets 
    print s 
end 

Chương trình chạy khi tôi gõ bất kỳ của các lệnh này:

  1. test.rb
  2. ruby test.rb
  3. echo hello | test.rb
  4. echo hello | ruby test.rb

Lệnh 1 và 2 hoạt động giống nhau. Các lệnh 3 và 4 hoạt động giống nhau. Mọi thứ hoạt động như tôi mong đợi.

EDIT 1: Dưới đây là một số lệnh tôi chạy:

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 

Tôi không biết nhiều về ftype, nhưng có lẽ bạn nên cài đặt ruby ​​trên hệ thống của bạn và xem nếu chương trình ví dụ của tôi làm việc cho bạn.

+0

Hey. Cảm ơn cho reponse.I'm có tất cả các nhị phân Cygwin quan trọng nhất trên PATH của tôi, bao gồm cả echo. Có lẽ đó là một điều WindowsXP. Buồn cười Tôi đã không nhận thấy nó trước đây. Tôi sẽ thử nó trên các hương vị khác của Windows và báo cáo lại. –

+0

Ồ! Và, tôi có thể yêu cầu bạn hiển thị cài đặt ftype và assoc của bạn liên kết tệp .rb với ruby ​​không? Có lẽ tôi đặt tôi lên một cách điên rồ. tức là đầu ra của "assoc .rb" và "ftype X", trong đó X là đầu ra từ lệnh assoc. Cảm ơn! –

+0

Tôi được cập nhật bằng câu trả lời để bao gồm thông tin đó. Tôi đã thực hiện các thí nghiệm của mình trong Microsoft Command Prompt bình thường. Bạn đang sử dụng vỏ gì? –

Các vấn đề liên quan