如何将所有调用的函数参数合二为一(Python 3)[重复]
Posted
技术标签:
【中文标题】如何将所有调用的函数参数合二为一(Python 3)[重复]【英文标题】:How to turn all called function arguments into one (Python 3) [duplicate] 【发布时间】:2016-09-07 07:46:31 【问题描述】:我正在用 Python 构建一个终端模拟器,我将命令存储在参数中,例如:
def ls(a):
for item in os.listdir():
print item
a = input('Command: ')
a = a.split()
终端是这样工作的:
-
要求用户输入
拆分输入
使用输入的第一部分在本地搜索函数
如果有,则使用输入的其余部分作为参数
调用函数
我对 cd 命令有疑问。
def cd(a):
if a == None:
print('cd')
print('Change directories')
else:
os.chdir(os.getcwd() + '/' + a())
当你让它进入一个没有空格的文件夹时它会起作用,比如当你在提示符中输入cd Windows
时,它会起作用。但是,当您尝试输入其中包含空格的文件夹时,问题就开始了。例如,当我键入cd Documents Copy
时,它要么进入文件夹 Documents(如果有),要么崩溃。
我该如何解决?我曾想过将所有被调用的函数参数合而为一,但我不知道该怎么做,可能还有其他方法。
【问题讨论】:
如果参数包含空格,您可以尝试用引号括起来,就像真正的终端一样。 但这不起作用,因为它会拆分输入,就像我输入 cd "Documents Copy",第一部分将是 cd,第二部分是 "Documents,第三部分是 Copy"跨度> 您可能需要进行更复杂的解析。创建终端并非易事。 它一直有效,直到我必须将多个参数作为一个参数 是的,我明白了。我建议阅读一些真实终端的语法,这样你就可以更好地了解你需要为这个项目重新发明哪些***。 【参考方案1】:您需要一个更复杂的split()
函数——请参阅Split a string by spaces — preserving quoted substrings answer 以获得潜在的解决方案。
更新
如果你有一个名为“the dog”的子目录,里面有一个空格,你可以在解释器中这样做:
Command: cd "the dog"
代码修改大致如下:
import shlex
import os
def ls(a):
for item in os.listdir():
print(item)
def cd(a):
if a == None:
print('cd')
print('Change directories')
else:
os.chdir(os.getcwd() + '/' + a)
a = input('Command: ')
a = shlex.split(a)
if len(a) > 1:
locals()[a[0]](a[1][:99])
print()
else:
locals()[a[0]](None)
print()
【讨论】:
如何在我的代码中使用它? @HackerGamerLV,我添加了一些示例使用代码和信息。 嗯...谢谢你,我会试试的! 谢谢,这正是我所需要的。以上是关于如何将所有调用的函数参数合二为一(Python 3)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?