how to run shell command like "<<EOT .... EOT"

叶佑群 ye.youqun at eisoo.com
Fri Sep 28 03:45:58 EDT 2012


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

     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.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20120928/6c064dde/attachment.html>


More information about the Python-list mailing list