I want to capture ping -h
output using Python, it results in exit status 2.
I am working on a Linux host.
import subprocess class Network_Ping (): def Get_Ping_Help(self): res = subprocess.check_output(['ping', '-h'], universal_newlines = True) print (res) def main(): obj = Network_Ping() obj.Get_Ping_Help() if __name__ == "__main__": main()
This is the output
`Traceback (most recent call last): File "Network_Ping.py", line 42, in <module> main() File "Network_Ping.py", line 35, in main obj.Get_Ping_Help() File "Network_Ping.py", line 20, in Get_Ping_Help res = subprocess.check_output(['ping', '-h'], universal_newlines = True) File "/usr/lib/python3.8/subprocess.py", line 411, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, File "/usr/lib/python3.8/subprocess.py", line 512, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command '['ping', '-h']' returned non-zero exit status 2.`
The command seems to execute normally on the shell. What is the cause of this error? How can I fix it?
Advertisement
Answer
Following Barmar solution
It is a normal behavior for ping, but the shell does not show it; Shell does not return exit status. We can see it by:
ping -h;echo $?
To avoid checking the exit status, we can replace subprocess.check_output()
with subprocess.run()
and to capture the output successfully.
res = subprocess.run(['ping', '-h'],capture_output=True, text = True) print(res.stderr)