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.txtrypython 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