【问题标题】:Connect another computer in local network连接本地网络中的另一台计算机
【发布时间】:2019-03-25 11:53:14
【问题描述】:

我正在尝试使用来自 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$')

【问题讨论】:

  • 第二个操作应该使用shutil.copy,而不是复制文件的系统调用。

标签: python windows subprocess local


【解决方案1】:

问题在于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$')

【讨论】:

    【解决方案2】:

    您需要确保您有权添加文件。 修改共享目录权限后测试成功。

    【讨论】:

    • {net use D: \\\C$ /user:} - 这在 cmd 中也会出错
    • 这是一个共享目录,你确定你有权限添加文件吗?
    • copy 不是可执行文件,如果没有shell=True,则无法在其上使用subprocess
    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多