how to run shell command like "<<EOT .... EOT"
叶佑群
ye.youqun at eisoo.com
Fri Sep 28 20:48:03 EDT 2012
More information about the Python-list mailing list
Fri Sep 28 20:48:03 EDT 2012
- Previous message (by thread): how to run shell command like "<<EOT .... EOT"
- Next message (by thread): how to run shell command like "<<EOT .... EOT"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
于 2012-9-28 16:16, Kushal Kumaran 写道: > On Fri, Sep 28, 2012 at 1:15 PM, 叶佑群<ye.youqun at 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. >>
- Previous message (by thread): how to run shell command like "<<EOT .... EOT"
- Next message (by thread): how to run shell command like "<<EOT .... EOT"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list