0

我正在尝试在 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        

是否可以使用子流程来完成此任务而无需用户与程序交互?任何帮助将不胜感激。谢谢。

4

1 回答 1

0

Proc.communicate()函数将有效地以 EOF 信号结束字节。因此,您可以将所有命令视为同一个文件的一部分。尝试:

proc.communicate(b'd /dev/sdb\n2')

\n是您在按下回车键时发送给程序的内容。

于 2018-01-09T04:23:34.307 回答