首页 > 编程问答 >如何运行从我正在编写的另一个 Python 脚本获取命令行参数的 Python 脚本?

如何运行从我正在编写的另一个 Python 脚本获取命令行参数的 Python 脚本?

时间:2024-07-27 15:20:21浏览次数:15  
标签:python

我有一个 python3 脚本,如下所示:

  ...

  def main():
    parser = argparse.ArgumentParser(description='Perform normalisation checks on pass2 files')
    parser.add_argument('-p', '--parser', action='store', help='parser_code.', default="")
    parser.add_argument('-m', '--midnight', help='start of day '
                        'in ns UTC', type=int, default=0)

    parser.add_argument('file', help='File to validate')
    args = parser.parse_args()

    rc = ReturnCode.SUCCESS

    rc = do_checks(args.file, args.midnight, args.parser)
    print(f"Validation completed with status: {rc}")

    exit(rc)

if __name__ == '__main__':
    main()

通常我会在命令行上运行此脚本,传入文件名作为参数,所以类似于:

python3 /util/check_normalisation.py -p lse /home/pchong/work/algotick/new_lob/pass2/01/97756_20240701.h5

但是,现在我有一个充满文件的目录(数千个文件),我想对其运行此脚本。

并且我发现从我创建的另一个脚本“运行此脚本”具有挑战性。是否有可能做到这一点? 这是我的脚本的概要:

    directory = '<path_to_directory_with_files_I_would_like_to_run_script_against'
 
    for file in os.listdir(directory):
        filename = os.fsdecode(file)

        run_the_above_script(filename)  # this is where I don't know what to do to run the command line python script

当然可以!在 Python 中,你可以使用 subprocess 模块来运行其他脚本,就像在命令行中一样。

以下是如何修改你的代码来实现这一点:

import os
import subprocess

directory = '<path_to_directory_with_files_I_would_like_to_run_script_against>'
script_path = '/util/check_normalisation.py'  # 将其替换为你的脚本的实际路径

for file in os.listdir(directory):
    filename = os.fsdecode(file)
    full_path = os.path.join(directory, filename)

    # 构建要运行的命令
    command = [
        'python3',  
        script_path,
        '-p', 'lse',  # 如果需要,添加其他参数
        full_path
    ]

    # 使用 subprocess 运行命令
    result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    # 处理输出 (可选)
    print(f"File: {filename}")
    print(f"Return code: {result.returncode}")
    if result.stdout:
        print(f"Standard output:\n{result.stdout.decode()}")
    if result.stderr:
        print(f"Standard error:\n{result.stderr.decode()}")

解释:

  1. 导入 subprocess : 我们需要这个模块来运行外部命令。
  2. 定义 script_path : 这应该是你的 check_normalisation.py 脚本的完整路径。
  3. 构建命令列表 : 我们创建一个列表,其中包含要运行的命令以及所有必要的参数,就像在命令行中输入一样。
  4. 使用 subprocess.run 运行命令 :
  5. command 是我们之前创建的命令列表。
  6. stdout=subprocess.PIPE stderr=subprocess.PIPE 将标准输出和错误分别捕获到变量中,以便我们以后可以处理它们。
  7. 处理输出 :
  8. result.returncode 包含被调用脚本的退出代码。
  9. result.stdout result.stderr 包含被调用脚本的标准输出和错误信息。你可以根据需要打印或处理它们。

其他选项:

  • 如果你只需要被调用脚本的退出代码,可以使用 subprocess.call()
  • 如果你需要与被调用脚本进行更复杂的交互(例如,实时读取输出),可以使用 subprocess.Popen()

希望这可以帮助你!

标签:python
From: 78800751

相关文章

  • Python 抓取 urllib2 HTTP 错误
    我正在尝试抓取一个网站,但我的代码仅在我打开该网站然后刷新它时才有效。我尝试了多种方法,但不断出现以下两个错误:第一个:ValueError:“HTTPError:HTTP错误416:请求的范围无法满足”urlslist=open("list_urls.txt").read()urlslist=urlslist.split("\n")forurlslistinurl......
  • 【Python】利用 face_recognition 库进行人脸检测识别【附完整示例】
    1.背景条件1.1安装所需库首先安装face_recognition和Pillow这两个库。您可以使用以下命令来安装它们:pipinstallface_recognitionPillow-ihttps://pypi.tuna.tsinghua.edu.cn/simple1.2拷贝代码安装完成后,您就可以在本地运行以下提供的代码了。importfac......
  • 太强了,Python+Excel真的是神仙组合!
    本书是由流行开源Python库xlwings的创始人:费利克斯·朱姆斯坦(FelixZumstein)所撰写。他详细阐述了如何将Python与Excel结合使用,让任务自动化,从而实现效率飞跃。为了帮助初学者克服对Python的恐惧,作者特意将教程内容设计成从简单到复杂的顺序进行介绍。这本书PDF共282页,分为4个......
  • 在 Python 中获取精确的 Android GPS 位置
    我尝试在Python中获取Android手机的GPS位置(使用QPython3应用程序)。这种可行,但是Android中似乎有几个LocationProvider:gps:纯gps定位,速度慢,耗能,但非常准确,正是我所需要的。网络:GPS和wifi/小区定位的混合,更快,但不太准确被动......
  • 使用 docker run 将 Python 单击选项传递给 ENTRYPOINT 会出现错误:“在 $PATH 中找不
    我有一个简单的python脚本,我想在docker容器内运行它。它打印一行消息“Hello{name}”。python脚本使用clickCLI界面来定义收件人名称,如果我直接运行它(不使用dockerrun命令),它将如下所示:pythonhello.py-nSmithDockerbuild命令:dockerbuild.-thello:1.......
  • 标题:在 OpenSees Python 中定义具有特定卸载行为的双线性弹塑性材料
    我正在使用Python中的OpenSees,我想定义一种在负载下表现出双线性弹塑性行为的材料。但是,我需要在卸载过程中将材质返回到其原始位置,遵循准确的加载路径。在此处输入图像描述我不确定如何在OpenSees中正确实现卸载行为,我正在寻找实现这一具体材料反应的指导。......
  • 使用正则表达式删除Python中常见的公司名称后缀
    我正在努力删除一些公司名称中的后缀。预期结果如下:原始名称:AppleInc.SonyCorporationFiatChryslerAutomobilesS.p.A.SamsungElectronicsCo.,Ltd.清除名称:AppleSonyFiatChryslerAutomobilesSamsungElectronics到目前为止我所做的:importred......
  • 如何将 Brave 网络浏览器与 python、selenium 和 chromedriver 结合使用?
    我从Google的Chrome切换到Brave网络浏览器并且很难让它像Chrome一样与Brave一起使用。Brave是基于Chromium的,所以我猜它应该不会那么难。我确保我的Brave和Chromedriver处于相同版本,像这样,~/some/path$chromedriver--versionChromeDriver76.0.3......
  • 覆盖 python 应用程序时权限被拒绝
    我使用python制作了一个粗略的自动更新应用程序,并使用freeze-cx制作了exe文件。首先,该应用程序检查firebase服务器上是否有最新版本的文件可用,如果可用则下载zip文件。并且应用程序解压并覆盖文件。this_file_path=sys.executableifgetattr(sys,'frozen......
  • Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测
    案例背景时间序列的异常值检测是方兴未艾的话题。比如很多单变量的,一条风速,一条用电量这种做时间序列异常值检测,想查看一下哪个时间点的用电量异常。多变量时间序列由不同变量随时间变化的序列组成,这些时间序列在实际应用中通常来自不同的传感器或数据源。多变量时间序列异......