子流程函数python:用于自动化

2024-10-01 00:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python在终端中运行此命令:

./Pascal --set=settings/1_settings.txt --runpathway=on --genescoring=sum --pval=1_snp_values.txt.gz

我需要运行这个脚本180次使用不同的pval每次。因此,通过Python实现自动化可以节省我很多时间。你知道吗

目前我有一个类似这样的Python子进程:

subprocess.call("./Pascal --set=settings/1_settings.txt --runpathway=on --genescoring=sum --pval=1_snp_values.txt.gz")

尽管如此,我还是得到了这个错误:

Traceback (most recent call last):
  File "test_automation.py", line 4, in <module>
    subprocess.call("./Pascal --set=settings/1_settings.txt --runpathway=on --genescoring=sum --pval=1_snp_values.txt.gz")
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception

问题是,当我在terminal中执行完全相同的命令时(在Python代码之外),它可以正常工作。我是不是用错语法了?你知道吗


Tags: inpytxtsettingsonlinecallfile
1条回答
网友
1楼 · 发布于 2024-10-01 00:14:31

正在使用^{}

您可以尝试使用此命令运行终端命令,如下所示:

import os
os.system("./Pascal  set=settings/1_settings.txt  runpathway=on  genescoring=sum  pval=1_snp_values.txt.gz")

如果这是可行的,那么在for-loop中执行以使其运行180次就很简单了:

import os
for _ in range(180):
    os.system("./Pascal  set=settings/1_settings.txt  runpathway=on  genescoring=sum  pval=1_snp_values.txt.gz")

此外,如果Pascal在运行脚本的同一目录中,则默认情况下不需要./的路径,它将搜索当前工作目录。所以你可以把它改成Pascal set-settings...

正在使用^{}

就我个人而言,我认为使用os.system是一个更干净的解决方案,但是您可以使用subprocess.call通过以下两种方式之一来完成相同的任务:

分别从list调用Pascal和其他参数,如:

import subprocess as s
s.call(['./Pascal', ' set=settings/1_settings.txt', ' runpathway=on', ' genescoring=sum', ' pval=1_snp_values.txt.gz'])

或者只需将shell设置为true,并将整行作为字符串传入,如下所示:

import subprocess as s
s.call('./Pascal  set=settings/1_settings.txt  runpathway=on  genescoring=sum  pval=1_snp_values.txt.gz', shell=True)

希望这对你有用!你知道吗

相关问题 更多 >