Python 然而,从sys.stdin读取的行最终以循环结束

Python 然而,从sys.stdin读取的行最终以循环结束,python,svg,stdin,sys,Python,Svg,Stdin,Sys,我试图从文本文件中读取行,但是我在尝试访问行时遇到了困难,或者我认为是这样 import sys import math import re CANVAS_HEIGHT = 500 CANVAS_WIDTH = 500 SVG_HEADER = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="%d" height="%d">\n' SVG_BOUNDING_BOX = '<rect x="0" y=

我试图从文本文件中读取行,但是我在尝试访问行时遇到了困难,或者我认为是这样

import sys
import math
import re

CANVAS_HEIGHT = 500
CANVAS_WIDTH = 500

SVG_HEADER = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="%d" height="%d">\n'
SVG_BOUNDING_BOX = '<rect x="0" y="0" width="%d" height="%d" style="stroke:#000;fill:none" />\n'
SVG_LINE = '<line x1="%d" y1="%d" x2="%d" y2="%d" style="stroke:#000" />\n'
SVG_FOOTER = '</svg>'

print SVG_HEADER % (CANVAS_WIDTH, CANVAS_HEIGHT)
print SVG_BOUNDING_BOX % (CANVAS_WIDTH, CANVAS_HEIGHT)

try:
    line_number = 0
    for S in sys.stdin:
        line_number = line_number + 1

        L = S.split()
        try:
            x0 = float(L[1])
            y0 = float(L[2])
            x1 = float(L[3])
            x1 = float(L[4])
        except:
            sys.stderr.write('Error in line %d: %s\n' % (line_number, S))

    print SVG_LINE, x0, y0, x1, y1
except:
    sys.stderr.write('Cannot open: %s\n' % sys.argv[1])

print '%s\n' % (SVG_FOOTER)
导入系统 输入数学 进口稀土 帆布高度=500 画布宽度=500 SVG_头='\n' SVG_边界_框='\n' SVG_行='\n' SVG_页脚=“” 打印SVG标题(画布宽度、画布高度) 打印SVG_边框%(画布宽度、画布高度) 尝试: 线号=0 对于sys.stdin中的S: 行号=行号+1 L=S.split() 尝试: x0=浮点数(L[1]) y0=浮点数(L[2]) x1=浮点数(L[3]) x1=浮点数(L[4]) 除: sys.stderr.write(“%d”行中的错误:%s\n“%”(行号,s)) 打印SVG_行,x0,y0,x1,y1 除: sys.stderr.write('无法打开:%s\n'%sys.argv[1]) 打印“%s\n%”(SVG\u页脚) 在候机楼,我被困在

对于sys.stdin中的S:

如果您想知道,这段代码的目的是获取行并将它们放入svg格式。所有的sys.stderr.write都只是我教授的规范

我正在读的台词就像

“第0.01.02.03.0行”

很多次。

在这一行:

for S in sys.stdin:
您的程序没有被卡住,它正在等待输入。尝试键入:

line 0.0 1.0 2.0 3.0
后跟EOF指示器(在UNIX和衍生工具中:
^D
。在MS-DOS和衍生工具中:
^Z
)。您可能需要输入EOF指示器两次

如果试图从文本文件而不是控制台读取,则需要在程序中打开文本文件,或在shell中使用文件重定向:

备选案文1:

# If you always use the same input file:
with open("somefile.txt") as fp:
    for S in fp:
        ...

或者,我的最爱,因为允许您指定一个、多个或不指定命令行参数

# If you want to specify file(s) on the command line
import fileinput
...
for S in fileinput.input():
    ...
备选案文2:

$ python my_program.py < somefile.txt
$python my_program.py

C:\Users\me>python my\u program.py
请回答以下问题,为您正在使用的编程语言添加标记并删除当前标记,所有这些看起来都非常笼统,但对其他人发现您的问题没有帮助。您如何调用您的程序?python lines_to_svg.py lines_files.txt该语法不会将
lines_files.txt
连接到您程序的标准输入,因此,您的
for
循环从终端读取。应该添加命令行:python lines_to_svg.py lines_file.txtry
python lines_to_svg.py
。我不能修改命令行输入,因为我的教授将使用“python lines_to_svg.py lines_file.txt”为了测试我的程序,在我的答案中考虑一个<代码>选项1 < /Cord>选项。Ya,我使用了FielEnter,它起作用了。话虽如此,我过去也曾以一种非常类似的方式使用sys.stdin,而且效果很好。
$ python my_program.py < somefile.txt
C:\Users\me> python my_program.py < somefile.txt