gpt4 book ai didi

python - 等号和函数参数的问题

转载 作者:行者123 更新时间:2023-11-28 22:50:22 24 4
gpt4 key购买 nike

我正在尝试构建一个允许重复此操作的函数(它会阻止控制台在 Windows 中打开):

 if platform.system() == 'Windows':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
subprocess.call(['myprogram.exe', '-P', arg],
stdout=someFile, startupinfo=startupinfo)
else:
subprocess.call(['myprogram.exe', '-P', arg], stdout=someFile)

因此我定义了如下函数:

def noWinConsole(program):
if platform.system() == 'Windows':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
subprocess.call(program, startupinfo=startupinfo)
else:
subprocess.call(program)

但是当我这样调用它时 noWinConsole(['myprogram.exe', '-P', arg], stdout=someFile) ,由于 stdout=一些文件:

TypeError: noWinConsole() got an unexpected keyword argument 'stdout'

我该如何解决这个问题?

最佳答案

noWinConsole 只是一个包装器,就目前而言,它只需要一个参数,program。因此,当您给它两个参数(program 作为第一个位置参数,然后关键字参数 stdout 用于 subprocess 调用时,它会崩溃).

幸运的是,有一个标准习惯用法可用于生成将任何参数集传递给内部函数的包装器。它使用 ***参数打包/解包的符号。

def noWinConsole(*args, **kwargs):
# Other stuff here as needed
subprocess.call(*args, **kwargs)

这基本上就是这个。函数定义中的 * 运算符获取所有输入位置参数,并将它们打包到一个名为 args 的元组中。然后,当您调用 subprocess 时,* 运算符解包 该元组,以相同的顺序将相同的参数传递给下一个函数。

** 运算符的工作方式基本相同,除了它捕获像 stdout='foo.txt' 这样的关键字参数并将它们全部打包到像这样的字典中{'stdout':'foo.txt'}。当您在调用内部函数时再次使用 ** 时,该字典将被解压缩并转换回关键字参数。

关于python - 等号和函数参数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com