python打包成exe脚本后subprocess.check_output无法执行下去,卡住了回车两次又执行下去了。
时间: 2024-03-28 09:41:35 浏览: 281
这个问题可能是由于`subprocess.check_output`没有读取完子进程的标准输出和标准错误输出导致的。可以尝试在`subprocess.check_output`中添加`timeout`参数来等待子进程的输出完成,例如:
```
subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=10, shell=True)
```
上述代码中的`timeout`参数表示等待子进程的输出完成的最长时间,单位是秒。如果子进程的输出时间超过了这个时间,`subprocess.check_output`会抛出`TimeoutExpired`异常,可以根据需要进行处理。
另外,如果子进程的输出比较多,可以考虑使用`subprocess.PIPE`来获取子进程的标准输出和标准错误输出,然后使用`communicate()`方法读取输出,例如:
```
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout, stderr = p.communicate(timeout=10)
```
上述代码中的`communicate()`方法会阻塞等待子进程的输出完成,如果超过了`timeout`参数指定的时间,也会抛出`TimeoutExpired`异常。
相关问题
Linux里输入命令并按下回车键来执行它们,然后输出结果将会显示在屏幕上。如何保存输出的结果?请写出Python脚本
您好,对于您的问题,您可以使用Linux命令行中的重定向符号将输出结果保存到文件中。例如,使用">"符号将输出结果保存到一个文件中,如下所示:
$ command > output.txt
这将执行命令并将输出结果保存到名为"output.txt"的文件中。如果您想将输出结果追加到文件中而不是覆盖它,请使用">>"符号,如下所示:
$ command >> output.txt
对于Python脚本,您可以使用以下代码将输出结果保存到文件中:
import subprocess
output = subprocess.check_output(["command"], shell=True)
with open("output.txt", "w") as f:
f.write(output.decode("utf-8"))
其中,"command"是您要执行的命令,"output.txt"是您要保存输出结果的文件名。请注意,这个Python脚本需要在Linux系统上运行。
Python语言写脚本,打开一个terminal,然后输入命令sudo openvpn➕文件,打开后检测命令行输出,当检测到library后输入用户名,然后回车,再输入密码,再回车
在Python中编写这样的脚本,你可以使用os模块来控制终端操作,subprocess模块来运行外部命令,并通过标准输入(stdin)向程序提供输入。下面是一个简单的示例,假设你已经在命令行中安装了openvpn并知道其日志中检测library的位置:
```python
import os
import subprocess
# 打开终端
os.system("gnome-terminal") # 如果是Linux,替换为适合您系统的终端启动命令
# 运行openvpn命令
command = "sudo openvpn 文件名.conf"
subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) # 注意这里的shell=True用于直接传递命令
# 检测library输出
output = ""
while True:
line = subprocess.check_output(["tail", "-f", "/path/to/openvpn_log"], universal_newlines=True)
if "library" in line: # 根据实际情况修改library关键词和日志路径
print("Detected 'library':")
break
# 提示用户输入用户名
username = input("请输入用户名: ")
# 提交输入
os.write(subprocess.PIPE, f"{username}\n".encode()) # 使用os.write模拟键盘输入,注意字符串编码
# 输入密码并提交
password = input("请输入密码: ")
os.write(subprocess.PIPE, f"{password}\n".encode())
# 等待进程结束
subprocess.wait()
#
阅读全文