【发布时间】:2021-09-03 05:40:56
【问题描述】:
假设您有以下代码
def set_args():
#Set Arguments
parser = argparse.ArgumentParser()
parser.add_argument("-test", help = 'test')
return parser
def run_code():
def fileCommand():
print("the file type is\n")
os.system("file " + filename).read().strip()
def main():
parser = set_args()
args = parser.parse_args()
从def main(): 调用fileCommand() 函数的最佳方法是什么?
我有以下代码当然不起作用:
def main():
parser = set_args()
args = parser.parse_args()
#If -test,
if args.test:
filename=args.test
fileCommand()
所以如果你要运行 python test.py -test test.txt 它应该运行 file 命令来获取文件类型
我知道如果我继续搞砸,我会以某种方式得到它,但我通常会开始过度复杂的事情,所以以后会更难。那么调用嵌套函数的正确方法是什么?
提前致谢!
【问题讨论】:
-
你不能;该函数仅绑定到
run_code内的局部变量,一旦run_code返回并且变量超出范围,该函数就会消失。 (不要介意你从不调用run_code,这意味着函数根本没有定义。)你为什么首先在run_code中定义它? -
正确的方法是从函数本身调用嵌套函数:
fileCommand()在其定义之后,在run_code()的主体中。如果不需要,甚至不嵌套它。 -
另外,
os.system()不返回命令的输出;它返回None。只需删除read和strip函数,因为file只会写入它从您的脚本继承的标准输出。 -
是的,对不起,我最初有
s = os.popen用于有效的文件命令,但我有一些命令需要 os.system 所以我切换它以获得更广泛的答案来合并 os.system 没有甚至先运行它。
标签: python function parameter-passing nested-function