【问题标题】:subprocess.Popen for loop outputsubprocess.Popen 循环输出
【发布时间】:2018-02-23 07:55:46
【问题描述】:

代码:

with open ('Client.txt','r') as Client_Name:  
    for Client in Client_Name:  
        out = subprocess.Popen(['script.sh', '-byclient', Client], stdout=subprocess.PIPE)   
        outputstring = out.communicate()  
        print (outputstring)

此代码没有给出输出,我想将Client.txt 文件中的客户端名称传递给script.sh。请有任何建议。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    您将名称传递给脚本的代码似乎正确,但communicate 实际上返回了tuple(stdout_data, stderr_data)

    您可能还想将universal_newlines=True 传递给Popen 以解码输出。试试这个:

    out = subprocess.Popen(['script.sh', '-byclient', Client],
                           stdout=subprocess.PIPE,
                           universal_newlines=True)
    out.wait()  # wait until the script has finished
    stdout_data, stderr_data = out.communicate()
    print(stdout_data)
    

    或者,如果您想实时打印输出:

    out = subprocess.Popen(['script.sh', '-byclient', Client],
                           stdout=subprocess.PIPE,
                           universal_newlines=True)
    for line in out.stdout:
        print(line)
    

    【讨论】:

    • with open ('Client.txt','r') as Client_Name:对于 Client_Name 中的客户端:Policy_Detail = subprocess.Popen(['script.sh', '-byclient', Client], stdout=subprocess.PIPE,universal_newlines=True) Policy_Detail.wait() stdout_data, stderr_data = Policy_Detail.communicate() print(stdout_data)
    • 如果我在循环中传递客户端名称有什么建议吗?
    猜你喜欢
    • 2010-10-17
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多