11

私はこのコードを持っています:

opts.info("Started domain %s (id=%d)" % (dom, domid))

上記のパラメータでシェルスクリプトを実行したいdomid。このようなもの:

subprocess.call(['test.sh %d', domid])

それはどのように機能しますか?

私はそれを試しました:

subprocess.call(['test.sh', domid])

しかし、私はこのエラーが発生します:

File "/usr/lib/xen-4.1/bin/xm", line 8, in <module>
    main.main(sys.argv)
  File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 3983, in main
    _, rc = _run_cmd(cmd, cmd_name, args)
  File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 4007, in _run_cmd
    return True, cmd(args)
  File "<string>", line 1, in <lambda>
  File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 1519, in xm_importcommand
    cmd.main([command] + args)
  File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1562, in main
    dom = make_domain(opts, config)
  File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1458, in make_domain
    subprocess.call(['test.sh', domid])
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings
4

4 に答える 4

4

私もこの投稿と同じことをしようとしていました。Pythonからシェルスクリプトを変数で実行します(変数とはコマンドライン引数で意味があると思います)。

結果を得るために次のことを行いました。他の人が同じ答えを探している場合に備えて共有しています。

    OS のインポート
    arglist = 'arg1 arg2 arg3'
    bashCommand = "/bin/bash script.sh " + arglist
    os.system(bashコマンド)

これは私にとってはうまくいきました。

また、さらに読んだ後、表示目的で結果を取得したい場合は、subprocess.Popenを使用することをお勧めします。bashスクリプトですべてを別のファイルにログアウトしているので、サブプロセスは実際には必要ありません。

お役に立てば幸いです。

    OS のインポート
    os.system("cat /root/test.sh")
    #!/ビン/バッシュ
    x='1'
    while [[ $x -le 10 ]] ; 行う
      echo $x: こんにちは $1 $2 $3
      睡眠 1
      x=$(( $x + 1 ))
    終わり

    arglist = 'arg1 arg2 arg3'
    bashCommand = 'bash /root/test.sh ' + arglist
    os.system(bashコマンド)
    1: こんにちは arg1 arg2 arg3
    2: こんにちは arg1 arg2 arg3
    3: こんにちは arg1 arg2 arg3
    4: こんにちは arg1 arg2 arg3
    5: こんにちは arg1 arg2 arg3
于 2014-01-08T01:20:33.663 に答える