Python2.7在多个子进程中循环。check_输出调用

Python2.7在多个子进程中循环。check_输出调用,python,subprocess,wmic,Python,Subprocess,Wmic,我在打印子进程的输出时遇到问题。请检查输出调用。 我在IP.txt中有一个IP地址列表,我从中读取并保存到列表IP。 然后我迭代该列表并调用wmic命令从该机器获取一些细节,但是只有最后一个名为prints output的命令。通过查看CLI输出,我可以看到每个输出都调用了print'Complete\n',但check\u输出并没有向输出变量返回任何内容 有什么想法吗?谢谢 Python代码: from subprocess import check_output f_in = open('

我在打印子进程的输出时遇到问题。请检查输出调用。 我在IP.txt中有一个IP地址列表,我从中读取并保存到列表IP。 然后我迭代该列表并调用wmic命令从该机器获取一些细节,但是只有最后一个名为prints output的命令。通过查看CLI输出,我可以看到每个输出都调用了print'Complete\n',但check\u输出并没有向输出变量返回任何内容

有什么想法吗?谢谢

Python代码:

from subprocess import check_output

f_in = open('ip.txt', 'r')
ips = []

for ip in f_in:
    ips.append(ip)

f_in.close()
f_out = open('pcs.txt','w')

for ip in ips:
    cmd = 'wmic /node:%s computersystem get name,username' % (ip)
    f_out.write('Trying %s\n'%ip)
    print 'Trying: %s' % (ip)
    try:
        output = check_output(cmd,shell=True)
        f_out.write(output)
        print 'Output\n--------\n%s' % output
        print 'Complete\n'
    except:
        f_out.write('Could not complete wmic call... \n\n')
        print 'Failed\n'

f_out.close()
文件输出:

CLI输出

尝试:172.16.5.133

输出 完整的

尝试:172.16.5.135

输出 完整的

电话:172.16.5.98

输出 完整的

尝试:172.16.5.131

输出 名称用户名 DOMAINWS48域\工作人员

完整的


在这些行中,您逐行读取文件:

f_in = open('ip.txt', 'r')
ips = []

for ip in f_in:
    ips.append(ip)
不幸的是,每一行都有一个行尾字符仍然终止每一行。然后将换行符作为IP地址的一部分传入。您可能需要考虑从所读取的每条线的结尾剥离新行<代码> \n>代码>:

f_in = open('ip.txt', 'r')
ips = []

for ip in f_in:
    ips.append(ip.strip('\n'))
strip('\n')
将删除字符串开头和结尾的所有换行符。有关此字符串方法的信息,请参见:

str.strip([字符])

返回删除前导字符和尾随字符的字符串副本。chars参数是一个字符串,指定要删除的字符集。如果省略或无,chars参数默认为删除空白。chars参数不是前缀或后缀;相反,其值的所有组合都被剥离:

您还可以使用以下命令读取文件中的所有行:

ips = [line.strip('\n') for line in f_in.readlines()]

我猜您的
ip.txt
文件在每一行上都有一个ip地址,文件的最后一行没有以换行符
\n
终止,在这种情况下,您的代码工作正常。

如果您直接从172.16.5.133、172.16.5.135和172.16.5.98的命令行发出WMIC命令,您会得到实际的输出或错误吗?如果您得到错误,那么该输出将被发送到stderr,您需要使用类似于
output=check\u output(cmd,stderr=subprocess.STDOUT,shell=True)的方法捕获它。
如果我直接为每个IP发出WMIC命令,我将获得正确的输出。我尝试过在ip.txt中只包含2个以上的ip。在每种情况下,只有最后一个IP打印所需的结果。此外,如果我为WMIC调用提供了错误的user/pass,则错误会显示在CLI输出中(仅在最后一次调用中)。这是我的问题。非常感谢你。
ips = [line.strip('\n') for line in f_in.readlines()]