python - 执行脚本时没有任何反应?

标签 python cmd command-line-arguments

我的目标是创建一个 python 脚本,它将格式化/修改 xml 文件。 文件路径和文件名将作为命令行中的参数给出。

下面是我的代码:

import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os

def main():
    parser = ArgumentParser()
    parser.add_argument('-p', '--path', help="path to file's directory", required=True)
    parser.add_argument('-f', '--file', help="file name", required=True)
    args = parser.parse_args()

    root_dir = sys.argv[1]
    file_name = sys.argv[2]

    path = sys.argv[1] + sys.argv[2]

    for dirpath, dirnames, files in os.walk(root_dir):
        for file in files:
            if file == file_name:
                print(os.path.join(dirpath, file_name))

                with open(path, 'r', encoding="utf8") as myfile:
                    try:
                        print("DONE")
                        parser = etree.XMLParser(remove_blank_text = True)
                        tree = etree.parse(path, parser)
                        tree.write(path, pretty_print = True)

                    except IOError:
                        print("IO Exception Occured")

if __name__ == "__main__":
    main()

当我从 cmd 运行它时 - 我有 0 个错误,但文件未格式化,即使我给出的文件名不存在 - 仍然没有错误。所以当我从 cmd 运行它时 - 什么也没有发生。

当我尝试在 Visual Studio 中调试它时,出现需要给出 2 个参数的错误。 谁能告诉我如何修复我的代码,我不知道我的代码哪里有错误?

最佳答案

您滥用/组合/混淆了 sys.argvArgumentParser。这段代码实际上给了你意想不到的结果,因为你的变量不是你想象的那样!

root_dir = sys.argv[1]
file_name = sys.argv[2]
# Add some print statements to examine these variables:
print(f'root_dir:{root_dir}')
print(f'file_name:{file_name}')

看:

enter image description here

这样做:

    root_dir = args.path
    file_name = args.file

这是我用来测试的代码:

from argparse import ArgumentParser
import sys

def main():
    parser = ArgumentParser()
    parser.add_argument('-p', '--path', help="path to file's directory", required=True)
    parser.add_argument('-f', '--file', help="file name", required=True)
    args = parser.parse_args()

    root_dir = args.path
    file_name = args.file
    print(f'root_dir:{root_dir}')
    print(f'file_name:{file_name}')

if __name__ == "__main__":
    main()

关于python - 执行脚本时没有任何反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971005/

相关文章:

python - 是否有 `difflib.get_close_matches()` 的替代方法返回索引(列表位置)而不是 str 列表?

c# - 如何在 C# 中获取 CMD/控制台编码

c - 如何将字符串指针转换为 64 位(_int64)变量?

python - 带参数的 Telegram Bot 可点击命令

python - 如何获得 TkInter GUI(不是 shell 提示符)以监听来自/dev/stdin 的输入

windows - 变量未按预期运行

java - 可执行 jar 不通过命令行运行

java - 如何在命令行参数中使用省略号?

command-line-arguments - 在Ansible中构建映射时发出警告

python - 如何更改数据框中保存的数据的格式?