Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python脚本的结果写入文本文件_Python - Fatal编程技术网

将Python脚本的结果写入文本文件

将Python脚本的结果写入文本文件,python,Python,我试图将下面的ping脚本结果写入文本文件,但收到错误消息 下面是我的代码: 导入操作系统 导入时间 导入子流程 #打开文件以保存ping结果 结果文件=打开(“results.txt”、“w”) 将open('ip-source.txt')作为ip: hosts=IPs.read() hosts=hosts.splitlines() 对于主机中的ip: 操作系统(“cls”) 打印('立即打印:',ip) 打印('-'*60) result=os.system('ping-n4{}'。格式(i

我试图将下面的ping脚本结果写入文本文件,但收到错误消息

下面是我的代码:

导入操作系统
导入时间
导入子流程
#打开文件以保存ping结果
结果文件=打开(“results.txt”、“w”)
将open('ip-source.txt')作为ip:
hosts=IPs.read()
hosts=hosts.splitlines()
对于主机中的ip:
操作系统(“cls”)
打印('立即打印:',ip)
打印('-'*60)
result=os.system('ping-n4{}'。格式(ip))
打印('-'*60)
时间。睡眠(1)
以open(“output.txt”、“w”、encoding=“utf8”)作为输出:
output.write(“\n”.join([post.text用于post in结果]))
当我运行它时,我得到以下错误消息:

Traceback (most recent call last):
File "script.py", line 21, in <module>
output.write("\n".join([post.text for post in result]))
TypeError: 'int' object is not iterable
回溯(最近一次呼叫最后一次):
文件“script.py”,第21行,在
output.write(“\n”.join([post.text用于post in结果]))
TypeError:“int”对象不可编辑

os.system
从调用的进程返回退出信号(通常为
0
1
)。如果你看,
os.system
实际上只是
subprocess.Popen
的包装函数

您需要a)使用类似于
subprocess.Popen
subprocess的方法。检查\u output
,然后b)将结果添加到列表中:

导入子流程
...
结果=[]
对于主机中的ip:
...
results.append(str(子进程检查_输出([“ping”、“-n”、“4”、str(ip)]))
以open(“output.txt”、“w”、encoding=“utf8”)作为输出:
输出.写入线(结果)

os.system
从调用的进程返回退出信号(通常为
0
1
)。如果你看,
os.system
实际上只是
subprocess.Popen
的包装函数

您需要a)使用类似于
subprocess.Popen
subprocess的方法。检查\u output
,然后b)将结果添加到列表中:

导入子流程
...
结果=[]
对于主机中的ip:
...
results.append(str(子进程检查_输出([“ping”、“-n”、“4”、str(ip)]))
以open(“output.txt”、“w”、encoding=“utf8”)作为输出:
输出.写入线(结果)

最好打开输出文件一次,然后在运行时将每个子流程附加到输出文件中

将open('ip-source.txt')作为ip,将open(“output.txt”,“w”)作为输出:
对于ip中的ip:
subprocess.run(
['ping','-n',4',ip.rstrip('\n')],
stdout=output,text=True,check=True)
还要注意,这样可以避免调用shell

您可以通过将输出文件作为二进制文件打开来稍微简化这一过程;然后,您可以取出
text=True
,让文件接受原始字节(即使它们最终将被随后读取文本文件的任何人解析为Unicode字符串)


在Python3中,子进程默认返回
字节
;然后,您必须
将这些字节解码成
str
(一旦您知道它们的编码);或者您可以指定
text=True
,让Python使用默认编码(在任何成人系统上为UTF-8;在Windows上为YMMV)透明地将所有这些字节编码和解码为字符串。

最好打开一次输出文件,然后在运行时将每个子进程附加到其中

将open('ip-source.txt')作为ip,将open(“output.txt”,“w”)作为输出:
对于ip中的ip:
subprocess.run(
['ping','-n',4',ip.rstrip('\n')],
stdout=output,text=True,check=True)
还要注意,这样可以避免调用shell

您可以通过将输出文件作为二进制文件打开来稍微简化这一过程;然后,您可以取出
text=True
,让文件接受原始字节(即使它们最终将被随后读取文本文件的任何人解析为Unicode字符串)



在Python3中,子进程默认返回
字节
;然后,您必须
将这些字节解码成
str
(一旦您知道它们的编码);或者您可以指定
text=True
让Python使用默认编码(任何成人系统上的UTF-8;Windows上的YMMV)透明地将所有这些字节编码和解码为字符串。

结果的类型是什么?看看
os.system
返回的内容,它不是控制台输出,而是退出信号(0,1)
结果
包含int数据。请打印
结果
这是否回答了您的问题?我打印了“结果”的输出,它是0-1结果的类型是什么?看看操作系统返回的是什么。系统返回的不是控制台输出,而是包含int数据的退出信号(0,1)
result
。请打印
结果
这是否回答了您的问题?我打印了“result”的输出,结果是0-1。我得到了以下错误:回溯(最近一次调用):文件“script.py”,第23行,在输出中。writelines(results)TypeError:write()参数必须是str,而不是bytes。你可以用
text=True
来解决这个问题,但我将发布一个包含更多细节的单独答案。@ahmed。只需将输出转换为一个
str
对象即可,在将输出转换为str之后,它就工作了!谢谢不幸的是,我遇到了以下错误:回溯(最近一次调用上次):文件“script.py”,第23行,在输出中。writelines(results)TypeError:write()参数必须是str,而不是bytes。你可以用
text=True
来解决这个问题,但我将发布一个包含更多细节的单独答案。@ahmed。只需将输出转换为一个
str
对象即可,在将输出转换为str之后,它就工作了!谢谢如果请求超时,如何排除那些ping结果。
目标不可访问
,因为这会在以后的分析中导致问题,那么您不能直接写入文件,或者您可能希望
grep-v-e“Request timeout”-e“destination unreachable”文件
并从中获取它