运行从 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 函数(无需单独传递参数)的主要内容,如果未能解决你的问题,请参考以下文章

使用参数从 Powershell 脚本运行可执行文件

从批处理文件运行 Powershell 脚本中的参数

从CMD文件运行PowerShell脚本 - 参数类型出错

使用参数从 Powershell 脚本运行 .bat 文件

Powershell 无法返回正确的退出代码

从PowerShell中使用参数和凭据启动.ps1脚本并从中获取输出