我的子进程的行为就像驱动器已映射,但不是。解决吗?

问题描述 投票:0回答:1

我正在使用Spyder解释器在Python 3.7中制作脚本,该解释器使用子进程模块将远程网络驱动器映射到计算机,然后检查该驱动器中是否存在文件。例如,我将计算机上的驱动器映射为“ S:\”,但在其计算机上将其映射为“ C:\”。它正在检查文件“ nircmd.exe”是否在其C:\上。当我运行代码时,我得到的是:

[-] Could not connect to 10.98.80.142
[-] Could not connect to 10.98.80.147

当我打印输出时:b''当我打印错误时:'System error 85 has occurred.\r\n\r\nThe local device name is already in use.\r\n\r\n'现在我明白这应该意味着我已经映射了驱动器,但是我没有。

from subprocess import Popen, PIPE
from os import path

def detectNircmd(computers):
    NIRCMD = "Windows\\System32\\nircmd.exe"
    valids = []
    invalids = []
    for computer in computers:
        try:
            p = Popen(['net', 'use', 'S:', '\\\%s\\c$' % computer],stderr=PIPE,stdin=PIPE,stdout=PIPE)
            out, err = p.communicate()
            if 'success' in out:
                if path.isfile("S:\\%s" % NIRCMD):
                    valids.append(computer)
                    p = Popen(['net', 'use', 'S:', '/delete'],stderr=PIPE,stdin=PIPE,stdout=PIPE)
                else:
                    invalids.append(computer)
                    p = Popen(['net', 'use', 'S:', '/delete'],stderr=PIPE,stdin=PIPE,stdout=PIPE)
            else:
                invalids.append(computer)
                p = Popen(['net', 'use', 'S:', '/delete'],stderr=PIPE,stdin=PIPE,stdout=PIPE)

        except:
            print("[-] Could not connect to %s" % computer)
    print(valids, invalids)

tests = ['10.98.80.142', '10.98.80.147']
detectNircmd(tests)
python windows networking subprocess
1个回答
0
投票

好了,我发现使用try / except语句出了点问题,所以我在没有它们的情况下重写了算法,现在可以了。

© www.soinside.com 2019 - 2024. All rights reserved.