Re: strange behaviour sys.argv
schnupfy wrote: ok, thanks for the answers. I try to hand over the 3rd part (the long trap) as one cmd argument. I will ask in a shell ng. Thanks again. Cheers Should be as simple as removing the backslashes /root/mk/services.py $HOST $SEVERITY $TRAP should pass TRAP as a single arg Charles -- http://mail.python.org/mailman/listinfo/python-list
strange behaviour sys.argv
Hi, I am not used to python and I am wondering about this thing: If I execute this from the shell: /root/mk/services.py 192.168.1.101 critical 192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2- MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.789.0.13 SNMPv2- SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY- MIB::snmpTrapCommunity.0 public I have the following cmd arguments: ['/root/mk/services.py', '192.168.1.101', 'critical', '192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2- MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.789.0.13 SNMPv2- SMI::enterprises.789.0.2cfCannotTakeover', '==', '1', 'priority', '==', 'critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 public'] If I execute the same thing from a bash script: #!/bin/bash TRAP='192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises. 789.0.13 SNMPv2-SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 public' HOST=$(echo $TRAP | awk '{print $1}') SEVERITY='critical' /root/mk/services.py $HOST $SEVERITY \$TRAP\ I get the following result: ['/root/mk/services.py', '192.168.1.101', 'critical', '192.168.1.101', '192.168.1.101', 'SNMPv2-MIB::sysUpTime.0', '14:13:02:57.06', 'SNMPv2-MIB::snmpTrapOID.0', 'SNMPv2- SMI::enterprises.789.0.13', 'SNMPv2-SMI::enterprises. 789.0.2cfCannotTakeover', '==', '1', 'priority', '==', 'critical', 'SNMP-COMMUNITY-MIB::snmpTrapAddress.0', '192.168.1.101', 'SNMP- COMMUNITY-MIB::snmpTrapCommunity.0', 'public'] Can someone help me with that? This is the output of echo /root/mk/services.py $HOST $SEVERITY \$TRAP \ /root/mk/services.py 192.168.1.101 critical 192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2- MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.789.0.13 SNMPv2- SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY- MIB::snmpTrapCommunity.0 public Thank you. Cheers Marcus -- http://mail.python.org/mailman/listinfo/python-list
Re: strange behaviour sys.argv
schnupfy wrote: I am not used to python and I am wondering about this thing: This is not a Python question. It is a question about how to use bash. I would try to help anyway, but I am unsure what results you actually want. Your example is too complicated as well. You should strip down your example to only the arguments that change. In doing this you may solve the problem on your own. -- Michael Hoffman -- http://mail.python.org/mailman/listinfo/python-list
Re: strange behaviour sys.argv
Michael Hoffman wrote: schnupfy wrote: I am not used to python and I am wondering about this thing: This is not a Python question. It is a question about how to use bash. [snip] Michael is correct, it is a bash thing, nothing to do with python. bash (and other *nix like shells) generally break arguments on white space. Quoting (both single and double) overrides this with (slightly) different rules for different shells. /root/mk/services.py 192.168.1.101 critical 192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2- MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.789.0.13 SNMPv2- SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY- MIB::snmpTrapCommunity.0 public Assuming this has been folded and actually is one long line (which the output confirms), you have passed the python script seven arguments '192.168.1.101' (blank seperated) 'critical' (also blank seperated) a string extending from just after the first double quote to just before the second, ie starting with '192.168.1.101' and ending with '789.0.2', with the immediately following (no white space) unquoted text 'fCannotTakeover' appended '==' (blank seperated) 'priority '==' a string starting with critical, with the quoted string from 'SNMP-COMMUNITY' to 'Community.0 ' (including the blank), the unquoted string 'public', and the null quoted string all appended. TRAP='192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises. 789.0.13 SNMPv2-SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 public' HOST=$(echo $TRAP | awk '{print $1}') SEVERITY='critical' /root/mk/services.py $HOST $SEVERITY \$TRAP\ Here, the variables are expanded, and then split into arguments on white space unless quoted. The backslashes protect the double quotes so they are treated as normal characters, so the $TRAP variable is also split into arguments on white space. Quotes resulting from the substitution of $TRAP are also protected (ie are treated as ordinary characters). The result is '192.168.1.101 (From $HOST) 'critical'(From $SEVERITY) '192.168.1.101' (Leading '' from \, rest from $TRAP, blank seperated) '192.168.1.101' (from $TRAP, blank seperated) 'SNMPv2-MIB::sysUpTime.0' and so on for the rest of the $TARP string, splitting it at white space. The last part of $TRAP, 'public', has a double quote appended from the \. Python is giving exactly what the shell has given it in both cases. Charles -- http://mail.python.org/mailman/listinfo/python-list
Re: strange behaviour sys.argv
On Apr 17, 3:00 pm, Charles Sanders [EMAIL PROTECTED] wrote: Michael Hoffman wrote: schnupfy wrote: I am not used to python and I am wondering about this thing: This is not a Python question. It is a question about how to use bash. [snip] Michael is correct, it is a bash thing, nothing to do with python. bash (and other *nix like shells) generally break arguments on white space. Quoting (both single and double) overrides this with (slightly) different rules for different shells. /root/mk/services.py 192.168.1.101 critical 192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2- MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises.789.0.13 SNMPv2- SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY- MIB::snmpTrapCommunity.0 public Assuming this has been folded and actually is one long line (which the output confirms), you have passed the python script seven arguments '192.168.1.101' (blank seperated) 'critical' (also blank seperated) a string extending from just after the first double quote to just before the second, ie starting with '192.168.1.101' and ending with '789.0.2', with the immediately following (no white space) unquoted text 'fCannotTakeover' appended '==' (blank seperated) 'priority '==' a string starting with critical, with the quoted string from 'SNMP-COMMUNITY' to 'Community.0 ' (including the blank), the unquoted string 'public', and the null quoted string all appended. TRAP='192.168.1.101 192.168.1.101 SNMPv2-MIB::sysUpTime.0 14:13:02:57.06 SNMPv2-MIB::snmpTrapOID.0 SNMPv2-SMI::enterprises. 789.0.13 SNMPv2-SMI::enterprises.789.0.2cfCannotTakeover == 1 priority == critical SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.1.101 SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 public' HOST=$(echo $TRAP | awk '{print $1}') SEVERITY='critical' /root/mk/services.py $HOST $SEVERITY \$TRAP\ Here, the variables are expanded, and then split into arguments on white space unless quoted. The backslashes protect the double quotes so they are treated as normal characters, so the $TRAP variable is also split into arguments on white space. Quotes resulting from the substitution of $TRAP are also protected (ie are treated as ordinary characters). The result is '192.168.1.101 (From $HOST) 'critical'(From $SEVERITY) '192.168.1.101' (Leading '' from \, rest from $TRAP, blank seperated) '192.168.1.101' (from $TRAP, blank seperated) 'SNMPv2-MIB::sysUpTime.0' and so on for the rest of the $TARP string, splitting it at white space. The last part of $TRAP, 'public', has a double quote appended from the \. Python is giving exactly what the shell has given it in both cases. Charles ok, thanks for the answers. I try to hand over the 3rd part (the long trap) as one cmd argument. I will ask in a shell ng. Thanks again. Cheers Marcus -- http://mail.python.org/mailman/listinfo/python-list