subprocess output to stdout and to PIPE

前端 未结 2 907
逝去的感伤
逝去的感伤 2021-01-27 07:54

I am using the subprocess module like that:

ping = subprocess.Popen(\'fping.exe 192.168.2.3 196.65.58.69\', stdout=PIPE)
output = ping.stdout.readli         


        
相关标签:
2条回答
  • 2021-01-27 08:14

    I have found a way to do that here is it:

    for line in os.popen("Fping x.x.x.x x.x.x.x -l"):
        ipList.append(line)
        print(line)
    

    That way, i am able to get the results from the Fping program into the list, and to print it to the screen while it is executing, since the for loop with the os.popen aren't wait for the program to finish, but always looping at every line from the program.

    0 讨论(0)
  • 2021-01-27 08:23

    There's no such thing as a pipe that goes to two places. Everything written to a pipe will only be read once. (While it's theoretically possible for your program and the console to have access to the same out pipe, if you succeed in doing so then only some of the data will go to your program, and only the data that doesn't will end up on the console.) To get all the output to your program and to the console, someone will have to read and duplicate the data. On a unix-like system, you might use the "tee" command for this, but you probably don't have that on your Windows machine.

    So you will have to write the output to the console as you get it.

    In this case, you can probably get away with using readline() in a loop instead of readlines().

    0 讨论(0)
提交回复
热议问题