如何在Python中用标准IO编写并打印文件?
我是Python的新手,开始编写脚本,帮助我完成日常工作。最近,我编写了一个SSH脚本,它将登录到服务器并检查与远程应用程序的连接,如果成功,则打印 我能够实现它,但在标准IO上看不到文件(我正在写入)的完整打印。任何人都可以看看我的代码,并建议一种方法应该如何做 我的代码输出:-如何在Python中用标准IO编写并打印文件?,python,file-handling,Python,File Handling,我是Python的新手,开始编写脚本,帮助我完成日常工作。最近,我编写了一个SSH脚本,它将登录到服务器并检查与远程应用程序的连接,如果成功,则打印 我能够实现它,但在标准IO上看不到文件(我正在写入)的完整打印。任何人都可以看看我的代码,并建议一种方法应该如何做 我的代码输出:- 您正在分配sys.stdout=f,这意味着以后所有到stdout的打印都将以f结束。我真的很困惑,为什么要让本地stdout进入一个文件,然后尝试从中读取——stdout通常更像是一个程序的“只写”流 我想您可能想
您正在分配
sys.stdout=f
,这意味着以后所有到stdout
的打印都将以f
结束。我真的很困惑,为什么要让本地stdout进入一个文件,然后尝试从中读取——stdout通常更像是一个程序的“只写”流
我想您可能想再次检查您的逻辑,但一旦您对sys.stdout进行赋值,所有print
语句的输出都将转到这里
假设结果不是太大,并且您有足够的内存,您可以执行以下操作:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if 'HTML' in result:
print "Site is up"
else:
print "Site is down"
output = os.system ("type c:\python27\out.txt")
print output
f.close()
这将把结果读入一个变量,将其打印到一个文件中,并在其中搜索HTML关键字。在我的方法中,只需打印结果
即可跳过os.system
部分,如
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if 'HTML' in result:
print "Site is up"
else:
print "Site is down"
print result
实际上,您可以将其简化一点,因为您已经在使用grep
来查看结果中是否包含HTML,您不必对其进行测试,您只需查看是否返回了任何内容,如:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if result:
print "Site is up"
else:
print "Site is down"
print result
如果您确实希望输出文件包含一个python字符串列表,您可以这样做:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.readlines()
f.write(str(result))
if result:
print "Site is up"
else:
print "Site is down"
print result
您正在分配
sys.stdout=f
,这意味着以后所有到stdout
的打印都将以f
结束。我真的很困惑,为什么要让本地stdout进入一个文件,然后尝试从中读取——stdout通常更像是一个程序的“只写”流
我想您可能想再次检查您的逻辑,但一旦您对sys.stdout进行赋值,所有print
语句的输出都将转到这里
假设结果不是太大,并且您有足够的内存,您可以执行以下操作:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if 'HTML' in result:
print "Site is up"
else:
print "Site is down"
output = os.system ("type c:\python27\out.txt")
print output
f.close()
这将把结果读入一个变量,将其打印到一个文件中,并在其中搜索HTML关键字。在我的方法中,只需打印结果
即可跳过os.system
部分,如
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if 'HTML' in result:
print "Site is up"
else:
print "Site is down"
print result
实际上,您可以将其简化一点,因为您已经在使用grep
来查看结果中是否包含HTML,您不必对其进行测试,您只需查看是否返回了任何内容,如:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.read()
f.write( result )
if result:
print "Site is up"
else:
print "Site is down"
print result
如果您确实希望输出文件包含一个python字符串列表,您可以这样做:
ssh.connect('xx.xxx.xxx.xx', username= 'xxxxxx', password= 'xxxxx', port=22)
stdin, stdout, stderr = ssh.exec_command('wget -O- http://xx.xxx.xxx.xxx:7777 | grep "HTML"') #some application IP
f = open('out.txt', 'w+',100)
result = stdout.readlines()
f.write(str(result))
if result:
print "Site is up"
else:
print "Site is down"
print result
您打开了文件,但没有尝试写入,因此是一个空文件。这是使用urllib的HTTP请求进行的简单复制,但在其他方面,文件I/O部分是相同的:
import urllib.request
# return a http.Request object
response = urllib.request.urlopen('http://google.com')
# open the file for both reading and writing
with open('out.txt', 'w+') as f:
f.write(str(response.read()))
if 'HTML' in f.read():
print("Site is up")
else:
print("Site is down")
另外,通过使用
和
上下文管理器来打开一个文件,您不必担心以后会关闭该文件。您打开了该文件,但没有尝试写入,因此是一个空文件。这是使用urllib的HTTP请求进行的简单复制,但在其他方面,文件I/O部分是相同的:
import urllib.request
# return a http.Request object
response = urllib.request.urlopen('http://google.com')
# open the file for both reading and writing
with open('out.txt', 'w+') as f:
f.write(str(response.read()))
if 'HTML' in f.read():
print("Site is up")
else:
print("Site is down")
另外,通过使用
和
上下文管理器打开文件,您不必担心以后会关闭文件。什么意思?在我的代码中,我在标准IO上看不到文件的完整打印?@AnandSKumar,我正在尝试读取WGET响应,然后根据IF/ELSE条件决定是否写入“站点已启动”或“站点已关闭”。现在,我没有看到写入out.txt文件的打印“Site is up”。你是什么意思?我在标准IO上看不到文件(我正在写入)的完整打印?@AnandSKumar-在我的代码中,我试图读取WGET响应,然后根据IF/ELSE条件决定是否写入“Site is up”或“Site is down”.现在,我没有看到会写入我的out.txt文件的打印“站点已启动”。谢谢你的建议。但是,如果我打印标准输出并尝试使用if/ELSE条件,那么它不会给出正确的结果。代码:用于stdout.readlines()中的行:print line.strip()stdin,stdout,stderr=ssh.exec_命令('wget-O-xx.xx.xx.xx:7777 | grep“HTML”):如果stdout.readlines()中的“HTML”为“HTML”,则打印stdout.readlines():print“Site is up”否则:print“Site is down”ssh.close()输出:---------------['\n']站点关闭-----------------代码无法根据标准输出做出决定,它错误地显示“站点关闭”。请注意,我没有在我的中使用readlines
,我使用read
将整个内容作为字符串返回。除非您确实想要/需要一个包含HTML
作为字符串的行列表,否则您不需要将其作为字符串list@sama我有一个版本应该也适用于readlines
,如果您真的想要将python列表写入文件,非常感谢您的输入。这两个建议对我都有效。谢谢你的建议。但是,如果我打印标准输出并尝试使用if/ELSE条件,那么它不会给出正确的结果。代码:用于stdout.readlines()中的行:print line.strip()stdin,stdout,stderr=ssh.exec_命令('wget-O-xx.xx.xx.xx:7777 | grep“HTML”):如果stdout.readlines()中的“HTML”为“HTML”,则打印stdout.readlines():print“Site is up”否则:print“Site is down”ssh.close()输出:---------------['\n']站点关闭-----------------代码无法根据标准输出做出决定,它错误地显示“站点关闭”。请注意,我没有在我的中使用readlines
,我使用read
将整个内容作为字符串返回。除非您确实想要/需要一个包含HTML
作为字符串的行列表,否则您不需要将其作为字符串list@sama我有一个版本应该