簡體   English   中英

使用子流程時,意外令牌附近的語法錯誤

[英]syntax error near unexpected token while use subprocess

此設計使我哭泣,代碼如下,請幫助

def runbatch(CMD,HOST):
    print CMD
    print HOST
    for host in HOST:
        env.host_string=host
        print CMD
        print env.host_string
        print "Execute command : \"%s\" at Host : %s" %(CMD,host)
        print "-------------------------------------------------"
        p=subprocess.Popen("run('ls')",shell=True,
            stderr=subprocess.PIPE,
            stdin=subprocess.PIPE)
        output = p.communicate()
        print output

錯誤顯示

(無,“ / bin / sh:-c:第0行:意外令牌'ls''\\n/bin/sh: -c: line 0:附近的語法錯誤'ls''\\n/bin/sh: -c: line 0: run('ls')'\\ n“)

subprocess.Popen()本地計算機上運行bash命令。 fabric所提供的是一種在本地計算機上輸入命令的方法,該命令已發送到遠程計算機並在遠程計算機上運行。 為此,您需要一個fabfile.py (現在,您需要精確地命名為fabfile.py ),在其中存儲fabric.api.run()命令,該命令實際上是Python命令而不是bash命令。 fabric.api.run()的參數是在遠程計算機上運行的bash命令。 例如fabfile.py

from fabric.api import run
from fabric.api import env
def runcommand():
    run(env.my_command)

使用此示例,可以使用命令行fab --set my_command=some_bash_command -H remote_host_ip runcommand激活此遠程調用。 該字符串是您應該傳遞給腳本中的subprocess.Popen()的字符串。 例如,讓我們調用您的腳本stackoverflow.py ,該腳本帶有一個命令行參數,該bash函數將在遠程計算機上執行

import subprocess
import sys

p=subprocess.Popen("fab --set my_command="+sys.argv[1]+" -H localhost runcommand",shell=True,
                    stderr=subprocess.PIPE,
                    stdin=subprocess.PIPE)
output = p.communicate()
print output

樣品運行:

Chip chip@ 12:10:58@ ~: python stackoverflow.py ls
[localhost] Executing task 'runcommand'
[localhost] run: ls
[localhost] out: AllArms.py             fines
[localhost] out: Applications               github
[localhost] out: Box Sync               grades_assgn1
[localhost] out: DFExperiment               heuristic.py
[localhost] out: Desktop                    honour-project-in-thompson-sampling
[localhost] out: Documents              jags_bin
[localhost] out: Downloads              latemath
[localhost] out: Dropbox                    launchall.sh
[localhost] out: FIT3080                    launcher
[localhost] out: GaussianExperiments            launchucb.sh
[localhost] out: GoogleDrive                minuteSep5
[localhost] out: HierarchicalStan.py            minutes22aug
[localhost] out: IMG_6169.JPG               model1.pkl
[localhost] out: Library                    mydata
[localhost] out: Monarch                    notes15Aug2016
[localhost] out: Movies                 notesSep12
[localhost] out: Music                  old-honour
[localhost] out: PTSTuneBeta                oracle.R
[localhost] out: Pictures               paper
[localhost] out: Public                 parallelExperiments
[localhost] out: Samsung                    people_to_mark_first
[localhost] out: WindowFrame.class          rezaPhone
[localhost] out: WindowFrame.java           spike.py
[localhost] out: a.out                  stackoverflow.class
[localhost] out: aaai.tar.gz                stackoverflow.cpp
[localhost] out: all_experiments                stackoverflow.java
[localhost] out: api4.csv               stackoverflow.py
[localhost] out: atlas                  test
[localhost] out: boostlib               test.py
[localhost] out: codes_and_data.tar.gz          test.txt
[localhost] out: eclipse                    test1.html
[localhost] out: emo                    test2.html
[localhost] out: experimentlist             testlib.py
[localhost] out: fabfile.py             testlib.pyc
[localhost] out: fabfile.pyc                uselib.py
[localhost] out: file1                  uselib.pyc
[localhost] out: file2
[localhost] out: 


Done.
Disconnecting from localhost... done.
(None, "[localhost] Login password for 'hiennguyen': \n")

重要說明 :以這種方式調用fab ,您可能必須:

  1. 啟用對遠程計算機的 ssh訪問。 在這種情況下, 遠程機器就是localhost

  2. 有時, 遠程主機要求您輸入密碼,而不會提示您輸入密碼(在我的機器上就是這種情況)。 如果您稍等片刻卻看不到任何內容,則可能要輸入密碼,然后按Enter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM