Python 属性错误:';模块';对象没有属性';杀死';

Python 属性错误:';模块';对象没有属性';杀死';,python,jython,Python,Jython,这是我的密码: def cmdoutput(cmd1, flag): finish = time.time() + 50 p = subprocess.Popen(cmd1, stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) while p.poll() is None: time.sleep(1) if finish

这是我的密码:

def cmdoutput(cmd1, flag):
    finish = time.time() + 50
    p = subprocess.Popen(cmd1, stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    while p.poll() is None:
        time.sleep(1)
        if finish < time.time():
            os.kill(p.pid, signal.SIGTERM)
            print "timed out and killed child, collecting what output exists so far"
        if (flag == "1"):#To enable container
            out, err = p.communicate(input='container\nzone1')
    else:
        out, err = p.communicate()
    print (out)
    return out

我的代码怎么了?

我想你有自己的
os.py

os.kill(…)
行之前放置
print os.\uuuuu file\uuuu
,您将看到发生了什么


更新

使用
p.kill()
而不是
os.kill(…)

更新

p.kill()
不起作用。(至少在Windows+Jython 2.5.2和2.5.3中)

p.pid
为无


按如下所示更改代码。更改
CPYTHON\u可执行\u路径
CMDOUTPUT\u脚本\u路径

CPYTHON_EXECUTABLE_PATH = r'c:\python27\python.exe' # Change path to python.exe
CMDOUTPUT_SCRIPT_PATH = r'c:\users\falsetru\cmdoutput.py' # Change path to the script

def cmdoutput(cmd1, flag):
    return subprocess.check_output([CPYTHON_EXECUTABLE_PATH, CMDOUTPUT_SCRIPT_PATH, flag])
将以下代码另存为
cmdoutput.py

import subprocess
import sys

def cmdoutput(cmd1, flag):
    finish = time.time() + 50
    p = subprocess.Popen(cmd1, stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    while p.poll() is None:
        time.sleep(1)
        if finish < time.time():
            p.kill()
            return '<<timeout>>'
        if flag == "1":
            out, err = p.communicate('container\nzone1')
    else:
        out, err = p.communicate()
    return out

if __name__ == '__main__':
    cmd, flag = sys.argv[1:3]
    print(cmdoutput(cmd, flag))
导入子流程
导入系统
def CMDOUT(cmd1,标志):
完成=时间。时间()+50
p=subprocess.Popen(cmd1,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.stdout,shell=True)
而p.poll()为无:
时间。睡眠(1)
如果finish
您是否正在运行python的标准安装?如果是这样,请检查您是否拥有正确的
os
模块-您可能意外地修改了它或导入了自己的模块。我使用的是Jython 2.7.1,而不是os.kill(..),我使用的是p.kill(),但它抛出的是“NameError:未定义全局名称”\u subprocess”。现在确定问题出在哪里。谢谢你的帮助!事实上,我正在使用Jython。我正在windows 2008服务器上运行它。我应该如何打印它们,我应该在kill之前简单地写上“print os.\uuuuu file\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这里的文件是什么它说“无法检索变量”文件“”--这就是它打印的内容。我用p.kill()替换了os.kill(…),现在它显示为“AttributeError:'Popen'对象没有属性'kill'”。我实际上在这个过程中删除了管道,它工作了(p.returncode)。你知道如何在没有管道的情况下捕获命令的输出吗?@user2511126,没有管道,据我所知,你无法获取输出。我这里没有使用p.communicate()。虽然我只对STDOUT as使用管道来获取结果,但我更依赖于p.returncode来确认命令是否成功/失败,稍后我将使用STDOUT.readline()来获取结果。请更新相关代码。没有代码,很难理解你的意思。
import subprocess
import sys

def cmdoutput(cmd1, flag):
    finish = time.time() + 50
    p = subprocess.Popen(cmd1, stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    while p.poll() is None:
        time.sleep(1)
        if finish < time.time():
            p.kill()
            return '<<timeout>>'
        if flag == "1":
            out, err = p.communicate('container\nzone1')
    else:
        out, err = p.communicate()
    return out

if __name__ == '__main__':
    cmd, flag = sys.argv[1:3]
    print(cmdoutput(cmd, flag))