【问题标题】:Piped shell script that needs user input isn't printing its output需要用户输入的管道 shell 脚本未打印其输出
【发布时间】:2018-04-03 10:38:34
【问题描述】:

我正在通过 Python 中的管道执行 shell 脚本,如下所示:

def(request,self):
    args_str1 = "flexiserver/build/svnenv.sh -j 'svntasktag.pl ss_fvnteste'"
    args1 = shlex.split(args_str1)
    pi = subprocess.Popen(args1, stdout=subprocess.PIPE)

    print("***** Before out err *****")
    out, err = pi.communicate()
    print(" OUT is %s " , out)

    context = {'out':out, 'err':err}
    req_context = RequestContext(request)
    return render_to_response(
        'pai_app/create_tag.html', context, context_instance=req_context)

此脚本正在等待用户输入,如“i”、“m”、“c”等参数。在用户给出任何输入之前,它不会打印,也不会在 webui 中显示。

我的问题是,有没有可能在 webui 本身中运行这样的 Perl 或 shell 脚本?或者对于上述问题还有其他解决方案吗?当我感到震惊时,任何人都可以帮助我。

【问题讨论】:

标签: python django


【解决方案1】:

虽然您的 Python 代码正在打开一个通往 shell 脚本的管道,该脚本将一些看起来像是 Perl 脚本的东西作为参数,但这个问题确实与 Python 中的管道有关。

此脚本正在等待用户输入,如“i”、“m”、“c”等参数。

您可以使用pi.communicate('i') 向进程发送“i”。

【讨论】:

  • 我添加为 pi.communicate('i') 但没有运气。它仍在等待输入 pi = subprocess.Popen(args1, stdout=subprocess.PIPE) out, err = pi.communicate('i') print(" OUT is %s " , out) context = {'out': out, 'err':err} return render_to_response('pai_app/create_tag.html', {'out':out, 'err':err}, context_instance=RequestContext(request))
  • 那么你明白了,有些事情你没有说出来。
  • 是否可以运行完整的脚本,包括 html 表单中的用户输入,就像我们通常在 linux 控制台中运行一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多