我正在尝试在Linux上自动执行fdisk实用程序,以便使用Python 3删除连接磁盘设备上的分区(在本例中为USB / dev / sdb)。
该脚本应执行以下命令:
1)。 sudo fdisk / dev / sdb //在/ dev / sdb上执行fdisk
欢迎使用fdisk(util-linux 2.29)。 更改将仅保留在内存中,直到您决定编写它们。 使用write命令前要小心。
命令(m求助):2)。 d / dev / sdb //尝试删除/ dev / sdb分区。
分区编号(1-4,默认4):3)。 2 //分区号2
到目前为止,这是我的Python代码:
proc = subprocess.Popen(["sudo", "fdisk", "/dev/sdb"], stdin=subprocess.PIPE)
proc.communicate(b'd /dev/sdb')
proc.communicate(b'2')
Line1和Line2完全正常,但Line3给出了以下错误:
Welcome to fdisk (util-linux 2.29).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): Partition number (1-4, default 4): Traceback (most recent call last):
File "./testing.py", line 83, in <module>
proc.communicate(b'2')
File "/usr/lib/python3.5/subprocess.py", line 786, in communicate
self._stdin_write(input)
File "/usr/lib/python3.5/subprocess.py", line 741, in _stdin_write
self.stdin.write(input)
ValueError: write to closed file
是否可以使用子进程来完成此任务,而无需用户与程序进行交互? 任何帮助将受到高度赞赏。感谢。
答案 0 :(得分:0)
Proc.communicate()
函数将使用EOF信号有效地结束字节。因此,您可以将所有命令视为同一文件的一部分。尝试:
proc.communicate(b'd /dev/sdb\n2')
\n
是您点击回车键时发送给程序的内容。