如何将参数传递给终端?

How to pass arguments to terminal?

我有一个 python 脚本可以压缩一些文件。为了使用密码压缩文件,我使用 os.system() 函数并传递我的压缩命令,即。 zip -j -re <file_path> <to_path>。此命令要求在终端上输入密码,我必须像这样在终端上手动输入密码。

Enter password: 
Verify password:

我想对我的密码进行硬编码,并在终端要求输入密码时传递它。 我尝试使用 os.system(password) 发送密码两次,以为它会接受,但没有成功。

cmd = "zip -j -re {} {}".format(DUMPSPATH,TEMPPATH)
passwrd = 'hello123'
os.system(cmd)
os.system(passwrd)
os.system(passwrd)

如何使用 python 发送参数以自动填充密码?

当您调用 os.system() 时,您正在向 shell 发送命令至 运行。因此,调用 os.system(passwrd) 会将您的密码作为独立命令发送给 shell 运行,这不是您想要的。

zip 程序具有一个 -P password 参数,允许您在最初 运行 命令时指定加密 zip 文件的密码,而无需为批处理作业手动输入密码。所以基本上你的代码应该改变成这样:

passwrd = 'hello123'
cmd = "zip -j -re -P {} {} {}".format(passwrd, DUMPSPATH,TEMPPATH)
os.system(cmd)

另外一个旁注,建议使用subprocess模块而不是求助于os.system,所以有机会看看subprocess.Popen

很高兴 computer_geek 找到了正确的命令行参数(我看不到它在这里列出,但它有效),但我绝对必须 post 我可笑的解决方案(因为post真实)。注意 - 需要在您的系统上安装 xdotool。

import subprocess

DUMPSPATH = ""
TEMPPATH = ""
pwd = "lala"

zipper = subprocess.Popen(['zip','-j','-re',DUMPSPATH,TEMPPATH])
subprocess.run(['xdotool','type',pwd])
subprocess.run(['xdotool','key', 'Return'])
subprocess.run(['xdotool','type',pwd])
subprocess.run(['xdotool','key', 'Return'])
zipper.wait()