Write to file descriptor 3 of a Python subprocess.Popen object

前端 未结 1 1155
旧时难觅i
旧时难觅i 2020-12-08 23:42

How do I write to file descriptor 3 of a subprocess.Popen object?

I\'m trying to accomplish the redirection in the following shell command with Python (without using

相关标签:
1条回答
  • 2020-12-09 00:15

    The subprocess proc inherits file descriptors opened in the parent process. So you can use os.open to open passphrase.txt and obtain its associated file descriptor. You can then construct a command which uses that file descriptor:

    import subprocess
    import shlex
    import os
    
    fd=os.open('passphrase.txt',os.O_RDONLY)
    cmd='gpg --passphrase-fd {fd} -c'.format(fd=fd)
    with open('filename.txt','r') as stdin_fh:
        with open('filename.gpg','w') as stdout_fh:        
            proc=subprocess.Popen(shlex.split(cmd),
                                  stdin=stdin_fh,
                                  stdout=stdout_fh)        
            proc.communicate()
    os.close(fd)
    

    To read from a pipe instead of a file, you could use os.pipe:

    import subprocess
    import shlex
    import os
    
    PASSPHRASE='...'
    
    in_fd,out_fd=os.pipe()
    os.write(out_fd,PASSPHRASE)
    os.close(out_fd)
    cmd='gpg --passphrase-fd {fd} -c'.format(fd=in_fd)
    with open('filename.txt','r') as stdin_fh:
        with open('filename.gpg','w') as stdout_fh:        
            proc=subprocess.Popen(shlex.split(cmd),
                                  stdin=stdin_fh,
                                  stdout=stdout_fh )        
            proc.communicate()
    os.close(in_fd)
    
    0 讨论(0)
提交回复
热议问题