运行从 PowerShell 显式获取参数的 Python 函数(无需单独传递参数)
Posted
技术标签:
【中文标题】运行从 PowerShell 显式获取参数的 Python 函数(无需单独传递参数)【英文标题】:Run a Python function that takes arguments from PowerShell explicitly (without passing the arguments separately) 【发布时间】:2016-04-18 20:37:13 【问题描述】:我在another Stack Overflow question 上找到了关于如何在命令行的 Python 文件中调用特定函数 def 的答案,但是调用的函数不带任何参数:
$ python -c 'from foo import hello; print hello()'
(我删除了 print 语句,因为它对我的需要来说似乎是多余的,在这种情况下我只是调用该函数。)
有几个答案说要使用参数解析,但这需要更改几个已经存在且不受欢迎的文件。
关于该问题的最后一个答案介绍了如何在 Bash 中做我想做的事(我需要知道如何在 PowerShell 中做)。
$ ip='"hi"' ; fun_name='call_from_terminal'
$ python -c "import $fun_name as cft; cft.test_term_fun($ip)"
hi
这是我的 Python 代码:
def operator (string):
print("Operator here, I got your message: ", string)
我想在 PowerShell 中将其称为:
$ python -c 'from myfile import operator; operator("my message here")'
我在 PowerShell 中输入的文字命令:
python -c 'from testscript import operator; operator("test")'
我收到的文字错误消息:
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'test' is not defined
【问题讨论】:
你试过什么? PowerShell 使用命令行参数运行可执行文件没有问题。 @Bill_Stewart 所有 powershell 在这里所做的就是调用 python 解释器。抱歉,我说我不想将参数作为附加参数(就像通常在 CLI 上那样)传递给 python 文件,然后必须做一些额外的工作来获取参数并调用该函数。我想像在 python 中一样从命令行调用,参数直接传递给函数,而不是作为 python 的参数。对于与变量相关的任何语法问题,我主要提到 powershell。 “将参数直接传递给函数而不是作为 python 的参数” - 你能解释一下你的意思吗?您在 python 命令行上指定的任何内容都是“python 的参数”。 而不是:python -c "from foo import bar; bar() argument_to_bar" 将参数作为 arg 数组中的单独条目传递给 bar 函数我想将其称为:python -c "from foo import bar; bar(argument_to_bar)" 将参数传递给函数,同时我在 python 文件中调用函数。本质上,我在 python 文件中有一个函数,它需要 1 个字符串参数。我只想调用那个函数(不是整个 python 脚本文件),我想完全从 cli 传递参数,而不必向原始文件添加任何 arg 解析。 再次:您尝试了什么,结果如何? (什么暗示你这不会在 PowerShell 中以某种方式工作?) 【参考方案1】:我想我理解这个问题。即使您指定单引号,PowerShell 也会将双引号传递给可执行文件(它试图提供帮助)。使用 showargs.exe(见http://windowsitpro.com/powershell/running-executables-powershell):
PS C:\> showargs python -c 'from testscript import operator; operator("test")'
python -c "from testscript import operator; operator("test")"
您应该能够转义字符串中的 "
字符以传递给 Python 解释器,无论是这样:
PS C:\> showargs python -c "from testscript import operator; operator(\""test\"")"
python -c "from testscript import operator; operator(\"test\")"
或者像这样:
PS C:\> showargs python -c "from testscript import operator; operator(\`"test\`")"
python -c "from testscript import operator; operator(\"test\")"
【讨论】:
以上是关于运行从 PowerShell 显式获取参数的 Python 函数(无需单独传递参数)的主要内容,如果未能解决你的问题,请参考以下文章