使用参数执行python

2024-09-27 21:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调用一个接受参数的Python脚本来备份VMware中的PostgreSQL数据库。在

代码如下:

# path to where you want to save the backup to
$filepath = "D:\pgbackups\"

# filename you want to call the backup
$filename = "torwpinf002_postgresdb_bk_"

# format the date/time so you can append to the backup filename
$filedate = get-date -Format "yyyyMMdd_HHmm"

# pack it all together 
$fullFileSave = $filepath + $filename + $filedate.ToString() + ".bak"

$BackupScriptFile = "C:\backup_win.py"

$executebackup = "`"$BackupScriptFile`"" + ' -p  "QX+qos5eu1D36&kB" -f ' + "`"$fullFileSave`""

python $executebackup

如果我抛出一个断点,我可以显示变量$executebackup,它将显示以下内容:

^{pr2}$

这会引发错误:

python : usage: backup_win.py [-h] -p PASSWORD -f BACKUP_FILE
At C:\Program Files\VMware\vCenter Server\python\torwpinf002_pgbackup.ps1:39 char:1
+ python $executebackup
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (usage: backup_w... -f BACKUP_FILE:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

backup_win.py: error: argument -p is required

有趣的是,我正在运行的是Windows2012 R2。同样的脚本在windows2008r2上运行得非常好。在

嗯?在

好吧,所以我认为我传递给python.exe的命令上的双引号弄乱了工作,所以我稍微修改了一下:

$executebackup = $BackupScriptFile + ' -p  "QX+qos5eu1D36&kB" -f ' + $fullFileSave

如果我将其回送到屏幕上,则会导致此输出(注意文件路径周围没有引号):

C:\backup_win.py  -p  "QX+qos5eu1D36&kB" -f D:\pgbackups\torwpinf002_postgresdb_bk_20160715_1050.bak

但这会返回以下错误:

python.exe : C:\Program Files\VMware\vCenter Server\python\python.exe: can't open file 'C:\backup_win.py  -p  QX+qos5eu1D36&kB -f 
D:\pgbackups\torwpinf002_postgresdb_bk_20160715_1050': [Errno 22] Invalid argument
At line:1 char:1
+ python.exe $executebackup
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (C:\Program File...nvalid argument:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

我真的卡住了,我相信这是很简单的事情,专家可以在5秒钟内调整。。我脑子进水了,不知道下一步该怎么办。最让我恼火的是,它在Windows2008上运行良好,但在2012上却不行。在

这里有件很有趣的事。如果我获取$executebackup的输出:

C:\backup_win.py  -p  "QX+qos5eu1D36&kB" -f D:\pgbackups\torwpinf002_postgresdb_bk_20160715_1058.bak

然后把它粘贴到PowerShell控制台,一切正常。在

PS C:\Users\Administrator> C:\backup_win.py  -p  "QX+qos5eu1D36&kB" -f D:\pgbackups\torwpinf002_postgresdb_bk_20160715_1058.bak

Backup completed successfully.

有什么想法可以让它在脚本中执行?在


Tags: thetopykbfilenamewinbackupbk
1条回答
网友
1楼 · 发布于 2024-09-27 21:27:27

不要将命令行定义为字符串(除非您想通过Invoke-Expressionwhich I wouldn't recommend在大多数情况下运行它)。只需使用call operator&)并像在控制台中那样放置参数:

& python.exe C:\backup_win.py -p "QX+qos5eu1D36&kB" -f D:\pgbackups\torwpinf002_postgresdb_bk_20160715_1058.bak

如果参数不同,可以将它们放入数组中,并在调用python.exe时将其放入splat

^{pr2}$

相关问题 更多 >

    热门问题