我正在尝试使用来自CMD.exe的命令通过python(子进程模块)连接本地网络中的另一台计算机
net use \\\\ip\C$ password /user:username
copy D:\file.txt \\ip\C$
然后在python中它看起来像下面。但是当我尝试第二个命令时,我得到:
“FileNotFoundError:[WinError 2]”
你遇到过同样的问题吗?有什么办法可以解决吗?
import subprocess as sp
code = sp.call(r'net use \\<ip>\C$ <pass> /user:<username>')
print(code)
sp.call(r'copy D:\file.txt \\<ip>\C$')
问题是copy
是一个内置的,而不是Windows中的真正命令。
那些Windows消息很糟糕,但"FileNotFoundError: [WinError 2]"
并不意味着无法访问源文件和目标文件之一(如果copy
失败,您将获得具有显式文件名的正常Windows消息)。
这意味着无法访问该命令。
因此,您需要将shell=True
添加到子进程调用中以获取对内置函数的访问权限。
但是不要这样做(安全问题,不可移植性),而是使用shutil.copy
。
除此之外,使用check_call
而不是call
作为你的第一个命令,就像net use
失败一样,其余的也会失败。最好早点失败。
总结一下,这就是我要做的:
import shutil
import subprocess as sp
sp.check_call(['net','use',r'\\<ip>\C$','password','/user:<username>'])
shutil.copy(r'D:\file.txt,r'\\<ip>\C$')
你需要确保你有权添加一个文件。我纠正了共享目录后,我已成功测试。