Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write to a FIFO from a Python program

I a trying to control the volume of mplayer from a python program. The mplayer program gets started from a bash script:

#!/bin/bash
mkfifo /home/administrator/files/mplayer-control.pipe
/usr/bin/mplayer -slave -input file=/home/administrator/files/mplayer-control.pipe /home/administrator/music/file.mp3

Then I have a GUI written in Python that is supposed to be able to control the volume of the instance of mplayer that is being played. I have tried the following:

os.system('echo "set_property volume $musicvol" > /home/administrator/files/mplayer-control.pipe')

That works if i substitute $musicvol with the numeric value instead, but that is unfortunately of no use. I need to be able to pass the variable.

I would also be able to solve it by invoking a bash script from the Python application, but I can not get that to work either:

subprocess.call("/home/administrator/files/setvolume.sh", executable="bash", shell=True)
like image 710
Julio Avatar asked Mar 06 '26 04:03

Julio


1 Answers

You don't need to call os.system and invoke a shell to write that line to the FIFO from your Python script- you can just do:

new_volume = 50
with open("/home/administrator/files/mplayer-control.pipe","w") as fp:
    fp.write("set_property volume %d\n" % (new_volume,))

It's not clear to me what you expect to happen in your original python, though - is musicvol set in the environment? If instead it's a Python variable that you want to insert into the string that you're passing, the easiest way is to use the string interpolation operator (%) as I've done in the example above.

In your example of using subprocess.call you don't need the executable or shell keyword arguments if setvolume.sh is executable and has a #! line - you could just do:

subprocess.call("/home/administrator/files/setvolume.sh")

However, it's better to just use open and write in Python as above, I think.

like image 95
Mark Longair Avatar answered Mar 07 '26 18:03

Mark Longair



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!