为了账号安全,请及时绑定邮箱和手机立即绑定

如何搜索脚本的输出并将小节保存到文件中?

如何搜索脚本的输出并将小节保存到文件中?

尚方宝剑之说 2022-06-02 11:08:24
我有一个命令 nipype.interface.afni.Warp 它给了我以下 python 终端输出:190920-12:22:00,333 nipype.interface INFO:         stderr 2019-09-20T12:22:00.333467:++ 3dWarp: AFNI version=AFNI_19.2.21 (Aug 29 2019) [64-bit]190920-12:22:00,334 nipype.interface INFO:         stderr 2019-09-20T12:22:00.334117:++ Authored by: RW Cox190920-12:22:00,365 nipype.interface INFO:         stderr 2019-09-20T12:22:00.365105:++ Using minimum spacing of 1.000000 mm for new grid spacing190920-12:22:03,252 nipype.interface INFO:         stderr 2019-09-20T12:22:03.252756:++ Output dataset /media/sf_Ubuntu_files/dicomtest/warp_test.nii.gz190920-12:22:03,253 nipype.interface INFO:         stdout 2019-09-20T12:22:03.253083:# mat44 Obliquity Transformation ::190920-12:22:03,253 nipype.interface INFO:         stdout 2019-09-20T12:22:03.253083:      1.000000     -0.000000      0.000000       0.000000190920-12:22:03,253 nipype.interface INFO:         stdout 2019-09-20T12:22:03.253083:      0.000000      0.999592     -0.028568      -1.842994190920-12:22:03,253 nipype.interface INFO:         stdout 2019-09-20T12:22:03.253083:     -0.000000      0.028568      0.999592       3.788057我想在“# mat44 Obliquity Transformation ::”行下方捕获矩阵并将其写入文件。我已经在 bash 中完成了这项工作,如下所示:3dWarp -flags_and_stuff | \grep  -A 4 '# mat44 Obliquity Transformation ::'  > $filename.1D但是我想用 python 来编写上面的 bash 命令。按照这篇博客文章的步骤,我尝试了这个:command = ['python3' ,"nipype.interfaces.afni.Warp('more stuff').run()"]my_env = os.environ.copy()my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=my_env)但是当我输入时,p.communicate()我得到:>>> p.communicate()(b"python3: can't open file 'nipype.interfaces.afni.Warp(<stuff>).run()': [Errno 2] No such file or directory\n", None)如何在 python 中完成这项工作?还是在 bash 中执行更好?我正在编写的脚本将使用这条线数千次,所以无论最快(我假设这也意味着最“pythonic”)的方法是什么。
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

我认为您的命令行参数python3在 Python 的Popen调用中不正确。和

command = ['python3' ,"nipype.interfaces.afni.Warp('more stuff').run()"]

启动的python3进程认为第一个参数是要执行的文件,但您希望运行一段 Python 代码。

将您的command声明更改为以下内容:

command = ['python3' ,'-c', "nipype.interfaces.afni.Warp('more stuff').run()"]

这应该使生成的python3进程将该参数解释为要执行的命令,而不是文件名。

这当然是假设您首先要执行此操作。如果您要在 Python 中启动 Python 的子进程,为什么不直接nipype.interfaces.afni.Warp('more stuff').run()在脚本中运行而不使用 Popen?


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信