【问题标题】:How do I execute this line of code in a python script as if it were command line?如何在 python 脚本中执行这行代码,就好像它是命令行一样?
【发布时间】:2016-06-21 13:32:57
【问题描述】:

我正在尝试编写一个脚本来复制运行该行:

    D:\...\bin>jython.bat D:\...\UploadTest.py

在 python 脚本中,就像通过 cmd 一样。我尝试了各种 subprocess.Popen 命令,但它们都不起作用(都找不到 Errno2 文件)。我目前有

    subprocess.Popen([r'D:\...\bin\jython.bat', r'D:\...\UploadTest.py'])

我尝试了其他几种变体。我主要关心命令的 .bat 和 .py 部分之间的空间。我应该只使用 r'' 和两者之间的空格吗?

【问题讨论】:

  • r'''\\',不能同时使用。
  • 如果模块在您的 python 路径上,您是否尝试过仅导入模块?除非有导入保护,否则导入和运行脚本是相同的。
  • 使用 os.path.join 防止使用斜线。这是一种多平台方法。 os.path.join
  • @MadPhysicist 如果我想将 .bat 和 .py 作为一行运行,那会起作用吗?我猜有点像一个论点(我不擅长编码词汇)
  • 我在这里做了一些假设。假设 #1 是您调用 Popen 的代码正在由 jython 运行。假设 #2 是 UploadTest.py 没有导入保护(if __name__ == '__main__' 的行)。如果两者都为真,请将suborocess.Popen... 替换为import UploadTest.py。如果UploadTest.py 不在您的python 路径上,请先执行sys.path.append('D:\\folder\\containing\\the\\script')

标签: python jython


【解决方案1】:

您可能需要在 POpen 调用中使用shell=True。但请注意documentation 中有关潜在安全问题的警告。

【讨论】:

  • 这是评论,不是答案。
  • @MadPhysicist 这是试图回答这个问题。如果您知道这不能回答问题,您能否提供更多信息?
  • 错误找不到文件表明问题不存在...
【解决方案2】:

我曾尝试过这样的事情。让我知道这是否符合您的要求。这里是参考link

#!/usr/bin/env python
from subprocess import call
from textwrap import dedent

call(dedent("""\
    #!/bin/bash
    echo Hello world
    """), shell=True)

【讨论】:

  • 我怀疑从批处理脚本运行 jython 的人是否会在 bash 中成功运行脚本。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多