Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从pythonshell运行bash命令_Python_Bash - Fatal编程技术网

从pythonshell运行bash命令

从pythonshell运行bash命令,python,bash,Python,Bash,我想从pythonshell运行bash命令。 我的聚会是: grep -Po "(?<=<cite>).*?(?=</cite>)" /tmp/file1.txt | awk -F/ '{print $1}' | awk '!x[$0]++' > /tmp/file2.txt grep-Po”(?命令模块现在已经过时。 如果您实际上不需要命令的输出,可以使用 import os exit_status = os.system("your-command"

我想从pythonshell运行bash命令。 我的聚会是:

grep -Po "(?<=<cite>).*?(?=</cite>)" /tmp/file1.txt | awk -F/ '{print $1}' | awk '!x[$0]++' > /tmp/file2.txt

grep-Po”(?命令
模块现在已经过时。
如果您实际上不需要命令的输出,可以使用

import os

exit_status = os.system("your-command")
import suproccess

out, err = subprocess.Popen("your | commands", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True).communicate()
否则,您可以使用

import os

exit_status = os.system("your-command")
import suproccess

out, err = subprocess.Popen("your | commands", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True).communicate()

注意:对于您的命令,您将stdout发送到
file2.txt
,因此我不希望在
out
中看到任何内容,但是您仍然会在stderr上看到错误消息,这些消息将进入
err

模块
命令现在已过时。
如果您实际上不需要命令的输出,可以使用

import os

exit_status = os.system("your-command")
import suproccess

out, err = subprocess.Popen("your | commands", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True).communicate()
否则,您可以使用

import os

exit_status = os.system("your-command")
import suproccess

out, err = subprocess.Popen("your | commands", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True).communicate()

注意:对于您的命令,您将stdout发送到
file2.txt
,因此我不希望在
out
中看到任何内容,但是您仍然会在stderr上看到错误消息,这些消息将进入
err

,建议在python中运行系统命令的方法是使用该模块

导入子流程

a=['grep','-Po','”(?建议在python中运行系统命令的方法是使用模块

导入子流程

a=['grep','-Po','”(?如果要避免分割参数和担心管道,可以使用
shell=True
选项:

cmd = "grep -Po \"(?<=<dev>).*?(?=</dev>)\" /tmp/file.txt | awk -F/ '{print $1}' | awk '!x[$0]++' > file2.txt"
out = subprocess.check_output(cmd, shell=True)

cmd=“grep-Po\”(?如果希望避免分割参数和担心管道,可以使用
shell=True
选项:

cmd = "grep -Po \"(?<=<dev>).*?(?=</dev>)\" /tmp/file.txt | awk -F/ '{print $1}' | awk '!x[$0]++' > file2.txt"
out = subprocess.check_output(cmd, shell=True)
cmd=“grep-Po\”(?您必须使用

import os 
os.system(command)
你必须使用

import os 
os.system(command)

让我们编写一个简单的函数来轻松处理这些杂乱的管道:

def subprocess_pipes (pipes, last_pipe_out = None):
    import subprocess
    from subprocess  import PIPE
    last_p = None
    for cmd in pipes:
        out_pipe = PIPE if not (cmd==pipes[-1] and last_pipe_out) else open(last_pipe_out, "w")
        cmd = cmd if isinstance(cmd, list) else cmd.split(" ")
        in_pipe = last_p.stdout if last_p else None
        p = subprocess.Popen(cmd, stdout = out_pipe, stdin = in_pipe)
        last_p = p
    comm = last_p.communicate()
    return comm
然后我们跑

subprocess_pipes(("ps ax", "grep python"), last_pipe_out = "test.out.2")
结果是一个“test.out.2”文件,其内容是将“ps ax”管道化为“grep python”

就你而言

a = ["grep", "-Po", "(?<=<cite>).*?(?=</cite>)", "/tmp/file1.txt"]
b = ["awk", "-F/", "{print $1}"]
c = ["awk", "!x[$0]++"]

subprocess_pipes((a, b, c),  last_pipe_out = "/tmp/file2.txt")

a=[“grep”、“-Po”、”(?让我们编写一个简单的函数来轻松处理这些混乱的管道:

def subprocess_pipes (pipes, last_pipe_out = None):
    import subprocess
    from subprocess  import PIPE
    last_p = None
    for cmd in pipes:
        out_pipe = PIPE if not (cmd==pipes[-1] and last_pipe_out) else open(last_pipe_out, "w")
        cmd = cmd if isinstance(cmd, list) else cmd.split(" ")
        in_pipe = last_p.stdout if last_p else None
        p = subprocess.Popen(cmd, stdout = out_pipe, stdin = in_pipe)
        last_p = p
    comm = last_p.communicate()
    return comm
然后我们跑

subprocess_pipes(("ps ax", "grep python"), last_pipe_out = "test.out.2")
结果是一个“test.out.2”文件,其内容是将“ps ax”管道化为“grep python”

就你而言

a = ["grep", "-Po", "(?<=<cite>).*?(?=</cite>)", "/tmp/file1.txt"]
b = ["awk", "-F/", "{print $1}"]
c = ["awk", "!x[$0]++"]

subprocess_pipes((a, b, c),  last_pipe_out = "/tmp/file2.txt")

a=[“grep”、“-Po”、”(?我想你要找的是:
ubprocess。检查输出(与popen参数相同,**kwargs)
,使用方法与使用
popen
命令相同,它应该显示正在调用的程序的输出


有关更多详细信息,请访问以下链接:

我认为您需要的是:
ubprocess。检查输出(与popen参数相同,**kwargs)
,使用方法与使用
popen
命令相同,它应该显示正在调用的程序的输出



有关更多详细信息,这里有一个链接:

命令
被弃用,取而代之的是
子流程
。也就是说,您在这里所做的操作——调用shell,而不是自己在Python中进行处理或设置管道——无论如何都被认为是糟糕的做法(如果处理用户提供的数据时不小心,可能会导致shell注入攻击).
命令
被弃用,取而代之的是
子流程
。也就是说,您在这里所做的事情——调用shell,而不是自己在Python中进行处理或设置管道——无论如何都被认为是糟糕的做法(而且,如果不非常小心,如果处理用户提供的数据,可能会导致shell注入攻击)。在我的情况下,您使用导入操作系统的答案更好,因为我正在将输出写入一个文件。此答案不会按照OP的需要将输出写入file2.txt。事实上,它甚至不会正确创建管道。后者是“awk”命令及其所有参数都将作为参数传递给“grep”(这会让人非常困惑)。请参阅我的答案,以了解如何正确地通过管道传输各种命令,以及如何使用子进程写入文件。@erjoalgo已编辑。现在似乎对我有效。但您和bort的答案更好。在我的情况下,您使用导入操作系统的答案更好,因为我正在将输出写入文件。此答案不会按照OP的需要将输出写入file2.txt。I事实上,它甚至不能正确地创建管道。后一个“awk”命令及其所有参数都将作为参数传递给“grep”(这会让人非常困惑)。请参阅我的答案,以了解如何使用子进程正确地传递各种命令和写入文件的示例。@erjoalgo Edited。现在似乎对我有效。。但您和bort的答案更好。由于
shell=True
,命令将在子shell中运行,因此所有shell指令,包括“>”若要将标准输出重定向到文件,应按预期工作。您是说,
file2.txt
未被创建?不…它正在工作…但有一个问题..我有
sed
命令…我可以更新我的问题,然后您可以帮助吗?谢谢。尽管您应该了解模式,以便您可以自己执行这些管道。@nettux443而不是手动创建这些繁琐的管道,我们可以编写一个函数来处理它们。请参阅我的最新答案,让我知道它是如何工作的。由于
shell=True
,该命令将在子shell中运行,因此所有shell指令,包括“>”若要将标准输出重定向到文件,应按预期工作。您是说,
file2.txt
未被创建?不…它正在工作…但有一个问题..我有
sed
命令…我可以更新我的问题,然后您可以帮助吗?谢谢。尽管您应该了解模式,以便您可以自己执行这些管道。@nettux443而不是手动创建这些繁琐的管道,我们可以编写一个函数来处理它们。请参阅我的最新答案,让我知道它是如何工作的。很好!我唯一的优势就是使用
string.split()
--人们很容易通过字符串替换来传递文件名。最好鼓励首先以数组形式传递参数。不过,这是一段非常可爱的代码;+1.Nice!我唯一的优势就是使用了
string.split()
--人们很容易尝试通过字符串替换来传递文件名。最好鼓励以数组的形式传递参数。尽管如此