首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何搜索脚本的输出并将分段保存到文件中?

如何搜索脚本的输出并将分段保存到文件中?
EN

Stack Overflow用户
提问于 2019-09-20 19:03:05
回答 1查看 85关注 0票数 0

我有一个命令nipype.interface.afni.Warp,它为我提供了以下python终端输出:

代码语言:javascript
复制
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 Cox
190920-12:22:00,365 nipype.interface INFO:
         stderr 2019-09-20T12:22:00.365105:++ Using minimum spacing of 1.000000 mm for new grid spacing
190920-12:22:03,252 nipype.interface INFO:
         stderr 2019-09-20T12:22:03.252756:++ Output dataset /media/sf_Ubuntu_files/dicomtest/warp_test.nii.gz
190920-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.000000
190920-12:22:03,253 nipype.interface INFO:
         stdout 2019-09-20T12:22:03.253083:      0.000000      0.999592     -0.028568      -1.842994
190920-12:22:03,253 nipype.interface INFO:
         stdout 2019-09-20T12:22:03.253083:     -0.000000      0.028568      0.999592       3.788057

我希望在"# mat44斜率转换::“下面捕获矩阵,并将其写入文件。我已经在bash做过了,看起来是这样的:

代码语言:javascript
复制
3dWarp -flags_and_stuff | \grep  -A 4 '# mat44 Obliquity Transformation ::'  > $filename.1D

但是,我想使用python编写上面的bash命令。

按照这篇博客文章的步骤,我尝试了以下步骤:

代码语言:javascript
复制
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()时,我得到:

代码语言:javascript
复制
>>> 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")方法是。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 19:49:54

我认为python3的命令行参数在Popen调用中是不正确的。使用

代码语言:javascript
复制
command = ['python3' ,"nipype.interfaces.afni.Warp('more stuff').run()"]

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

command声明更改为:

代码语言:javascript
复制
command = ['python3' ,'-c', "nipype.interfaces.afni.Warp('more stuff').run()"]

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

当然,这是假设您首先想要这样做。如果您要在Python中启动Python的子进程,那么为什么不使用Popen在脚本中运行nipype.interfaces.afni.Warp('more stuff').run()呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58033909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档