Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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
Python 从bash启动脚本并指导输出_Python_Linux_Bash - Fatal编程技术网

Python 从bash启动脚本并指导输出

Python 从bash启动脚本并指导输出,python,linux,bash,Python,Linux,Bash,关于从bash脚本中启动脚本,我有一个关于bash语法的问题 我的问题是: 我看到了以下语法: #!/bin/bash python do_something.py > /dev/null 2>&1 & 你能解释一下什么是指向/dev/null,如果前面已经提到/dev/null,那么2>&1的含义是什么吗 此外,如果我有一行定义如下: python do_something.py > 2>&1 & 这有什么不同 如果在许多路径中有相同

关于从bash脚本中启动脚本,我有一个关于bash语法的问题

我的问题是:

  • 我看到了以下语法:

    #!/bin/bash
    python do_something.py > /dev/null 2>&1 &
    
    你能解释一下什么是指向
    /dev/null
    ,如果前面已经提到
    /dev/null
    ,那么
    2>&1
    的含义是什么吗

  • 此外,如果我有一行定义如下:

    python do_something.py > 2>&1 &
    
    这有什么不同

  • 如果在许多路径中有相同的python文件,那么在启动
    ps-ef | grep python
    之后,如何区分每个进程。 当我这样做的时候,我会得到一个进程列表,这些进程都被称为
    do_something.py
    ,如果我能拥有每个pid的完整执行路径字符串就好了;我该怎么做

  • 注意:启动的python文件正在编写自己的日志文件。

    1)标准输出重定向到/dev/null,标准输出重定向到标准输出,即控制台

    • 1> 文件名:将标准输出重定向到文件“filename”
    • 1> >文件名:重定向并将标准输出附加到文件“filename”
    • 2> 文件名:将stderr重定向到文件“filename”
    • 2> >文件名:重定向stderr并将其附加到文件“filename”中
    • &>文件名:将stdout和stderr重定向到文件“filename”
    3) 使用ps auxww标志,您将在终端窗口和shell脚本中看到输出的完整路径。“ps手册”:

    -宽输出。对于无限宽度,请使用此选项两次。

    答案:

    一,二
    将执行命令(在您的示例中是
    python do_something.py
    )后在
    stdout
    中打印的内容重定向到名为
    /dev/null
    的文件。
    /dev/null
    有点像黑洞。无论你给它写什么,它都会消失

    2>&1
    stderr
    (其fd为2)的输出重定向到
    stdout
    (其fd为1)

    有关重定向的更多信息,请参阅


    有关
    /dev/null

    好的,diclaimer的更多信息,请参阅链接:我现在没有访问bash的权限,因此可能是我错了

  • 让我们中断您的命令:
    python do_something.py>/dev/null 2>&1&

    python do\u something.py
    将运行您的命令
    /dev/null
    将标准输出重定向到/dev/null
    2>&1
    将把stderr重定向到stdout
    &
    将分叉您的进程并在后台运行

    因此,您的命令将忽略stdout/stderr,并在后台运行 相当于命令
    python do\u something.py>&/dev/null&

  • python do\u something.py>2>&1&

    >2
    将标准输出重定向到名为2的文件
    &1
    将标准输出重定向到标准输出(是标准输出到标准输出)
    &
    将分叉您的进程并在后台运行

    因此,这个命令几乎相当于
    python do\u something.py>2&
    , 它会将输出重定向到名为2的文件(例如:
    echo'yes'>2>&1

    注意:可能未指定
    &1
    的行为

  • 由于您已经使用
    运行了命令,因此您的命令将是fork和
    在后台运行,因此我不知道有什么方法可以在后台运行
    案例您仍然可以查找
    /proc
    目录[3]以查看 您的命令已在哪个目录下运行

  • [1]
    [2]

    [3]
    ls-l/proc/$PROCCESSID/cwd

    查看..对于(2),运行
    :>2>&1&
    会生成
    -bash:unexpected token'2'附近的语法错误
    -它被视为无效,因为
    重定向没有文件名。那不是我所期望的;我想文件名应该是
    2>&1
    象形文字。(假设参数和I/O重定向成功,
    是一个标准的shell(内置)命令,它不会成功执行任何操作。)您尚未解释
    2>&1
    符号。您可以包括URL引用,例如
    [I/O重定向](https://www.gnu.org/software/bash/manual/bash.html#Redirections)
    显示为@user6775110:您能否解释表达式中每个&的角色:
    python do\u something.py>&/dev/null&