用引号括起变量

时间:2014-04-02 13:58:54

标签: python command-line-arguments

我有一个烧瓶应用程序,它将用户键入的内容添加到表单中,然后添加一些额外的内容并将其作为另一个脚本中的变量传递。 例如:

session['search'] = '--q ' + request.args.get('search_key')

这将运行我最终的脚本,所以当用户输入“abc”这个传递时;

example.py --q abc

我想要做的是允许空格,以便用户输入“d e f”这将被传递;

example.py --q "d e f"

这有可能实现吗?目前,python脚本example.py将空间移动到下一个参数上。 目前,当我包含“”时,会发送“搜索”一词,而不是用户在表单中添加的内容。

2 个答案:

答案 0 :(得分:1)

你是如何运行第二个脚本的?

如果以正确的方式执行,则根本不会调用shell,因此您不需要添加引号(由shell使用 来决定如何将参数拆分为一个argv数组),而是可以传递你想要的精确argv数组。

例如:

subprocess.Popen(['example.py', '--q', request.args.get('search_key', '')])

未添加引号,但不需要引号 - request.args.get('search_key, '')的结果作为单个参数传递。请注意,这仅适用于未通过shell=True

有关详细信息,请参阅subprocess module文档 - 有关收集stdout和stderr,检查退出状态等信息。

答案 1 :(得分:0)

您可以按照以下方式执行此操作:

in_text = '"'+str(input('Enter arg: '))+'"'
session['search'] = '--q ' + request.args.get(in_text)

基本上,它将用户输入作为字符串输入,并在开头和结尾添加"

>>> a = '"'+str(input('In: '))+'"'
In: hello
>>> a
'"hello"'
>>> print a
"hello"