我想在python中运行fdisk函数,但是返回使得这不起作用...
command = ['echo', '-e', "'o\nn\np\n1\n\n\nw'", '|', 'sudo', 'fdisk', '/dev/xvdm']
p = subprocess.Popen(command, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, err = p.communicate()
这给出了(不正确的)输出:
b"'o\nn\np\n1\n\n\nw' | sudo fdisk /dev/xvdm\n"
等价物是什么?
答案 0 :(得分:2)
为什么不运行fdisk
并自己发送输入?
command = ['sudo', 'fdisk', '/dev/xvdm']
p = subprocess.Popen(command, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, err = p.communicate(b"o\nn\np\n1\n\n\nw")
答案 1 :(得分:0)
你不能在这样的命令中使用管道(|)。管道作为程序的参数给出(在你的情况下为“echo”)。
scnerd为您提供了将输入文本发送到fdisk的最佳方式/答案。
如果你真的想保留管道,你应该使用参数“-c”(命令)运行一个“bash”程序,并在参数中输入命令(包括你的管道):
command = ['bash', '-c', "echo -e 'o\nn\np\n1\n\n\nw' | sudo fdisk /dev/xvdm"]
p = subprocess.Popen(command, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, err = p.communicate()