想要Python函数可以运行shell命令,例如
echo 'Process started'; ping 127.0.0.1 -i 2 ; echo 'Process finished'
要求
有人可以帮我吗?
Subprocess.run看起来不起作用,导致命令没有被杀死,仍在运行,
subprocess.run(cmd, stderr=sys.stderr, stdout=sys.stdout, shell=True, timeout=timeout)
答案 0 :(得分:1)
实际上,timeout
中的subprocess.run
选项应该杀死该命令。似乎this doesn't work when shell=True
is also set.如果不需要高级Shell功能,则可以随时将命令分解为参数,然后执行以下操作:
subprocess.run(['ping', '127.0.0.1', '-i', '2'], timeout = 10)
这还有一个优点,那就是很容易在Python内更改参数而不会引起安全问题。
答案 1 :(得分:0)
我相信os.system()
可以满足您的需求:-
Control + C
(键盘中断)将其中断。您可以剥离给定的复合命令,以创建每个单独的命令,例如:-
echo 'Process started'; ping 127.0.0.1 -i 2 ; echo 'Process finished'
成为:-
echo 'Process started'
ping 127.0.0.1 -i 2
echo 'Process finished'
否,您不能将每个命令存储在单独的变量/列表中。然后将其传递给os.system()
。
示例:-
import os
os.system("echo 'Process started'")
os.system("ping 127.0.0.1 -i 2")
os.system("echo 'Process Finished'")
样品输出:-
'Process started'
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
'Process Finished'
P.S。:-:这只是os.system()
的外行示例。您可以将其进一步扩展到其故障安全版本。