所以我使用DSI Studio程序,我正在做很多重复性的任务,我想自动化。它有一个命令行界面,可以使用命令
$request_url = 'https://#############.com/v1/pages/scene_23/views/view_36/records';
$request_body = '{"some_field":"some data"}';
$request_context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => [
'X-Knack-Application-Id: ########################',
'X-Knack-REST-API-Key: ########-####-####-####-############',
'Content-Type: application/json',
],
'content' => $request_body,
'ignore_errors' => true, // return error message, if any, in response_body
],
]);
$response_body = file_get_contents($request_url, false, $request_context);
var_dump($response_body);
它完全符合我的要求并输出文件。 但是当我尝试
时dsi_studio --action=trk -source=HarveyReg2.hdr.src.gz.odf4.f5rec.012fx.rdi.gqi.0.2.fib.gz --method=0 --
seed=leftprechiasm.nii.gz --roi=1.nii.gz --fiber_count=100 --output=track5.trk
我返回返回代码1.如果我使用subprocess.run,会发生同样的事情。我对不同的排列进行了调整,但无济于事。我唯一能够获得0返回代码的是
import subprocess
subprocess.call("dsi_studio --action=trk --source=HarveyReg2.hdr.src.gz.odf4.f5rec.012fx.rdi.gqi.0.2.fib.gz --method=0 --fa_threshold=0.00000 --turning_angle=70 --step_size=0.01 --smoothing=0 --min_length=0.0 --max_length=300.0 --initial_dir=0 --seed_plan=0 --interpolation=0 --thread_count=12 --seed=leftprechiasm.nii.gz --roi=1.nii.gz --fiber_count=100 --output=track4.trk", shell=True)
我尝试过,因为这是我需要在cmd中使用命令的目录。但即便这样做,它仍然无法奏效。我是python的新手,我花了几天时间阅读像我这样的问题,但当我尝试通过模板匹配实现他们的解决方案时,我没有运气。
答案 0 :(得分:2)
每个子进程调用都会创建自己的shell,因此cd
实际上不会影响您以后的调用,因为您在错误的目录中会被中断。尝试
os.chdir("G:\Programs\dsi_studio_64")
subprocess.call("dsi_studio --action=trk --source=HarveyReg2.hdr.src.gz.odf4.f5rec.012fx.rdi.gqi.0.2.fib.gz --method=0 --fa_threshold=0.00000 --turning_angle=70 --step_size=0.01 --smoothing=0 --min_length=0.0 --max_length=300.0 --initial_dir=0 --seed_plan=0 --interpolation=0 --thread_count=12 --seed=leftprechiasm.nii.gz --roi=1.nii.gz --fiber_count=100 --output=track4.trk", shell=True)
您也可以使用cwd
参数调用(),如
subprocess.call("your long command", cwd="directory")
答案 1 :(得分:0)
您可以使用subprocess.Popen。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
def run_process(exe):
'Define a function for running commands and capturing stdout line by line'
p = subprocess.Popen(exe.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
return iter(p.stdout.readline, b'')
if __name__ == '__main__':
for line in run_process("G:\Programs\dsi_studio_64\dsi_studio --action=trk --source=HarveyReg2.hdr.src.gz.odf4.f5rec.012fx.rdi.gqi.0.2.fib.gz --method=0 --fa_threshold=0.00000 --turning_angle=70 --step_size=0.01 --smoothing=0 --min_length=0.0 --max_length=300.0 --initial_dir=0 --seed_plan=0 --interpolation=0 --thread_count=12 --seed=leftprechiasm.nii.gz --roi=1.nii.gz --fiber_count=100 --output=track4.trk"):
print(line)