使用 shutil.copy 模块通过网络传输文件的正确方法是什么?
What is the proper way to transfer a file over a network with the shutil.copy module?
我是一名新手程序员,所以请原谅我的糟糕代码和简单的查询。我正在尝试通过 Python 将 SQL 数据库备份从一台机器传输到另一台机器。我在 Windows 7 Professional 机器上使用 Python 版本 3.6.4。我要将其传输到的机器是 Windows 10 机器。现在,当我在 Python shell 中逐行输入以下代码时,它可以正常工作。
import os, pyodbc, shutil
connection = pyodbc.connect(driver = '{ODBC Driver 13 for SQL Server}',
server = 'SERVER',
database = 'DATABASE',
UID = 'USER',
PWD = 'PASS',
autocommit = True)
connection.cursor().execute(
r"backup database DATABASE to disk = 'c:/DB/backup/DATABASE.bak';")
connection.close()
os.system(r'net use \0.0.0.001\DB\backup /user:DOMAIN\USER PASS')
os.system(r'net use \0.0.0.100\d\Backups /user:DOMAIN\USER PASS')
file = 'DATABASE.bak'
src = os.path.join('\\0.0.0.001','DB','backup', file)
dst = os.path.join('\\0.0.0.100','d','Backups')
shutil.move(src, dst)
os.system(r'net use * /delete /y')
但是,当我编译代码(通过 pyinstaller)并在 Windows 10 机器上 运行 时,它首先在初始时间运行,然后每次都出错。我得到的错误是 Windows Error 2 (File Not Found)
.
Traceback (most recent call last):
File "shutil.py", line 544, in move
FileNotFoundError: [WinError 2] The system cannot find the file specified: '\\0.0.0.001\DB\backup\DATABASE.bak' -> '\\0.0.0.100\d\Backups\DATABASE.bak'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "transfer.py", line 47, in SQL
File "shutil.py", line 558, in move
File "shutil.py", line 257, in copy2
File "shutil.py", line 120, in copyfile
FileNotFoundError: [Errno 2] No such file or directory: '\\0.0.0.001\DB\backup\DATABASE.bak'
我不明白这是为什么。任何指导将不胜感激,这样我就可以停止用头敲桌子了。
我能够通过使用 os.system()
调用 robocoby
然后使用 os.remove()
删除原始文件来解决问题。奇迹般有效。抱歉 shutil()
.
我是一名新手程序员,所以请原谅我的糟糕代码和简单的查询。我正在尝试通过 Python 将 SQL 数据库备份从一台机器传输到另一台机器。我在 Windows 7 Professional 机器上使用 Python 版本 3.6.4。我要将其传输到的机器是 Windows 10 机器。现在,当我在 Python shell 中逐行输入以下代码时,它可以正常工作。
import os, pyodbc, shutil
connection = pyodbc.connect(driver = '{ODBC Driver 13 for SQL Server}',
server = 'SERVER',
database = 'DATABASE',
UID = 'USER',
PWD = 'PASS',
autocommit = True)
connection.cursor().execute(
r"backup database DATABASE to disk = 'c:/DB/backup/DATABASE.bak';")
connection.close()
os.system(r'net use \0.0.0.001\DB\backup /user:DOMAIN\USER PASS')
os.system(r'net use \0.0.0.100\d\Backups /user:DOMAIN\USER PASS')
file = 'DATABASE.bak'
src = os.path.join('\\0.0.0.001','DB','backup', file)
dst = os.path.join('\\0.0.0.100','d','Backups')
shutil.move(src, dst)
os.system(r'net use * /delete /y')
但是,当我编译代码(通过 pyinstaller)并在 Windows 10 机器上 运行 时,它首先在初始时间运行,然后每次都出错。我得到的错误是 Windows Error 2 (File Not Found)
.
Traceback (most recent call last):
File "shutil.py", line 544, in move
FileNotFoundError: [WinError 2] The system cannot find the file specified: '\\0.0.0.001\DB\backup\DATABASE.bak' -> '\\0.0.0.100\d\Backups\DATABASE.bak'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "transfer.py", line 47, in SQL
File "shutil.py", line 558, in move
File "shutil.py", line 257, in copy2
File "shutil.py", line 120, in copyfile
FileNotFoundError: [Errno 2] No such file or directory: '\\0.0.0.001\DB\backup\DATABASE.bak'
我不明白这是为什么。任何指导将不胜感激,这样我就可以停止用头敲桌子了。
我能够通过使用 os.system()
调用 robocoby
然后使用 os.remove()
删除原始文件来解决问题。奇迹般有效。抱歉 shutil()
.