python with echo

Hans Mulder hansmu at xs4all.nl
Thu Nov 12 16:20:47 EST 2009


Steven D'Aprano wrote:
> On Wed, 11 Nov 2009 17:24:37 -0800, hong zhang wrote:
> 
>> List,
>>
>> I have a question of python using echo.
>>
>> POWER = 14
>> return_value = os.system('echo 14 >
>> /sys/class/net/wlan1/device/tx_power')
>>
>> can assign 14 to tx_power
>>
>> But
>> return_value = os.system('echo $POWER >
>> /sys/class/net/wlan1/device/tx_power')
> 
> POWER = 14 doesn't create an environment variable visible to echo. It is 
> a Python variable.
> 
>>>> POWER = 14
>>>> import os
>>>> return_value = os.system('echo $POWER')
> 
>>>> return_value
> 0

You can set environment variables from within Python using os.putenv:

 >>> import os
 >>> os.putenv('POWER', '14')
 >>> return_value = os.system('echo $POWER')
14
 >>> return_value
0

Keep in mind that putenv() only affects processes started by Python
after you call putenv.  It does not, for example, affect the shell
process you used to invoke Python:

$ POWER=14
$ python -c 'import os
os.putenv("POWER", "42")
os.system("echo $POWER")'
42
$ echo $POWER
14
$

>> return_value is 256 not 0. It cannot assign 14 to tx_power.
> 
> I don't understand that. Exit status codes on all systems I'm familiar 
> with are limited to 0 through 255. What operating system are you using?

Probably some form of Unix.  The value returned by os.system() is the
exit status shifted left one byte, for example:

 >>> os.system("exit 1")
256

Hope this helps,

-- HansM




More information about the Python-list mailing list