于 2012-9-28 16:16, Kushal Kumaran 写道:
On Fri, Sep 28, 2012 at 1:15 PM, 叶佑群<ye.you...@eisoo.com> wrote:
Hi, all,
I have the shell command like this:
sfdisk -uM /dev/sdb<< EOT
,1000,83
,,83
EOT
I have tried subprocess.Popen, pexpect.spawn and os.popen, but none of
these works, but when I type this shell command in shell, it is works fine.
I wonder how to emulate this type of behavior in python , and if someone can
figure out the reason why?
The sample code of subprocess.Popen is:
command = ["sfdisk", "-uM", target, "<<EOT", "\r\n",
",", 1000, ",", "83", "\r\n",
",", ",", "83", "\r\n", "EOT", "\r\n"]
pobj = subprocess.Popen (command, bufsize=1, \
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
res = pobj.stderr.readline ()
if res is not None and pobj.returncode != 0:
observer.ShowProgress (u"对设备 %s 分区失败!" % target)
return False
The "<<EOT" syntax (called a here-document) just provides input to the
command. If you use the communicate method, you can provide input as
an argument:
command = ["sfdisk", "-uM", target ]
instructions = """
,1000,83
,,83
"""
pobj = subprocess.Popen(command, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(output, errors) = pobj.communicate(instructions)
I tried this, but it is still not work.
and pexpect code is:
child = pexpect.spawn ("sfdisk -uM /dev/sdb<<EOT")
child.sendline (....)
child.sendline (....)
child.sendline (....)
and os.popen like this:
os.popen ("sfdisk -uM /dev/sdb<<EOT\n,1000,83\n,,83\nEOT\n")
I tried "\r\n", and it doesn't work either.
--
http://mail.python.org/mailman/listinfo/python-list