如何将调用argparse风格Python脚本的Bash命令转换为可在Python IDE中运行的Python脚本
把Bash命令转成可在Python IDE中运行的脚本
这里有几种实用的方法,帮你把原来的Bash命令转换成可以直接在Python IDE里运行的代码,不用每次手动敲命令行参数:
方法1:直接修改argparse_test.py的默认参数
如果可以改动原脚本的话,这是最省心的方式——直接给argparse的参数设置默认值,运行脚本时就会自动套用这些值,完全不用传参。
打开argparse_test.py,找到你定义argparse的部分,改成这样:
import argparse def main(): parser = argparse.ArgumentParser() # 把Bash里的参数值设为默认值 parser.add_argument('--is_training', type=int, default=3) parser.add_argument('--root_path', type=str, default='./dataset/') parser.add_argument('--data_path', type=str, default='data.csv') # 处理seq_len变量,这里替换成你实际需要的数值就行 seq_len = 100 # 假设原命令最后是日志路径参数,修正格式后设为默认值 parser.add_argument('--log_path', type=str, default=f'test_{seq_len}_196.log') args = parser.parse_args() # 后面的逻辑正常使用args.is_training、args.root_path这些变量即可 if __name__ == '__main__': main()
这样你直接在IDE里运行argparse_test.py,就和原来的Bash命令效果完全一致。
方法2:写一个包装脚本,用subprocess调用原脚本
如果不想改动原脚本,可以写一个新的Python脚本,用subprocess模块模拟Bash命令的调用,把参数主动传进去:
import subprocess # 定义你需要的变量 seq_len = 100 # 换成你实际要用的数值 # 构造和原Bash命令对应的参数列表 cmd = [ 'python', '-u', 'argparse_test.py', '--is_training', '3', '--root_path', './dataset/', '--data_path', 'data.csv', '--log_path', f'test_{seq_len}_196.log' ] # 执行命令 subprocess.run(cmd, check=True)
把这个脚本存成run_script.py,在IDE里运行它,就会自动调用原脚本并传入所有参数,和敲Bash命令的效果一模一样。
方法3:用sys.argv模拟命令行参数
还有一种方式是在原脚本开头手动设置sys.argv,让argparse以为你是在命令行输入的参数:
在argparse_test.py的最开头(import之后)添加这段代码:
import sys import argparse # 定义变量 seq_len = 100 # 模拟命令行传入的参数 sys.argv = [ 'argparse_test.py', '--is_training', '3', '--root_path', './dataset/', '--data_path', 'data.csv', '--log_path', f'test_{seq_len}_196.log' ] def main(): parser = argparse.ArgumentParser() # 这里保持原argparse定义不变,不用加default parser.add_argument('--is_training', type=int) parser.add_argument('--root_path', type=str) parser.add_argument('--data_path', type=str) parser.add_argument('--log_path', type=str) args = parser.parse_args() # 后续逻辑正常使用args即可 if __name__ == '__main__': main()
运行脚本时,argparse会读取你设置的sys.argv参数,效果和命令行运行完全一致。
小提醒
原Bash命令最后那个参数-/test_$seq_len'_'196.log格式有点问题,我默认它是--log_path test_${seq_len}_196.log,如果实际参数名不是--log_path,你只需要替换成对应的参数名就行;如果seq_len需要动态调整,直接在脚本里改数值或者改成从环境变量/IDE配置读取都可以。
内容的提问来源于stack exchange,提问作者freak11
相关产品推荐
相关产品推荐

