1

Pythonスクリプトを実行するJavaアプリケーションがありますが、次の行で失敗します

cmd = "cmd /c asm.bat < 1.ADD.asm 2> nul"
os.system(cmd)

これは、Windows シェルから Java アプリを起動したときに機能しましたが、Eclipse デバッガー内からアプリを実行すると失敗します。

RuntimeWarning: Unable to determine _shell_command for underlying os: nt.

私も試しcmd = "asm.bat < 1.ADD.asm 2> nul"ましたが、同じエラーが発生しました。

完全なスタック トレースは次のとおりです。

  File "MyScript.py", line 73, in runTestFile
    os.system("cmd.exe")
  File "C:\mycad\share\python\Lib\subprocess.py", line 456, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\mycad\share\python\Lib\subprocess.py", line 753, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\mycad\share\python\Lib\subprocess.py", line 1238, in _execute_child
    args = _shell_command + args
TypeError: unsupported operand type(s) for +: 'NoneType' and 'lis

subprocess.py の 456 行目はこちら

def call(*popenargs, **kwargs):
    """Run command with arguments.  Wait for command to complete, then
    return the returncode attribute.

    The arguments are the same as for the Popen constructor.  Example:

    retcode = call(["ls", "-l"])
    """
    return Popen(*popenargs, **kwargs).wait() # line 456

os.py に os.system() が見つからず、代わりにos.system("cmd.exe")呼び出しcall関数が見つからないのは興味深いことです。subprocess.pyの1238_execute_child行目_shell_commandは None であり、エラーが発生します。そこに到達する前に実行され、どちらの場合も_setup_platform返されます。_get_shell_commands = (['cmd.exe', '/c'], ['command.com', '/c'])最初の実行可能 cmd.exe は while によって変換さC:\windows\system32\cmd.exeれ、distutils.spawn.find_executable(executable)デバッガーからアプリを起動するcmd.execommand.comに変換されます。基本的にenv 変数のすべてのエントリを繰り返し、実行可能ファイルを最後に添付して、そのようなファイルが存在する場合は結果を返します。しかし、パス env は、オーバーライドしたため、アプリが Eclipse で開始されたときに空になります。Nonedistutils.spawn.find_executable(executable)pathcmd.exe

4

2 に答える 2

0

https://stackoverflow.com/a/17673245/1083704mypath;${env_var:PATH}で説明されているように、アプリの起動構成で使用する必要がありました。

于 2013-11-07T16:36:39.467 に答える