我有一個命令 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?
添加回答
舉報
0/150
提交
取消