On 27 February 2016 at 16:50, Ganesh Pal <ganesh1...@gmail.com> wrote: > Iam on python 2.6 and Linux , I need input on the below program , > here is the spinet of my program
It would be much better if you presented a complete program here. Otherwise the missing parts will confuse people. See: http://sscce.org/ > filename='/tmp2/2.txt' > > def check_file(): > """ > Run the command parallel on all the machines , if there is a > file named /tmp/file2.txt extract file2.txt > > """ > global filename > baddr = '' > cmd = ("run_al_paral 'ls -al %s'" % (filename)) > print(cmd) > stdout, stderr, exitcode = run(cmd) > print(stdout) > lines = stdout.strip().split('\n') .splitlines() is more portable than .split('\n') as it handles '\r' as well. > print(lines) There are a few problems with the code below: > for line in lines: > if 'exited' in lines: > continue > > file = lines[0].split()[9][6:] Okay so you're skipping lines that contain the text "exited" in order to find the line you want. That's fine except that you then try to access the line you've found as lines[0] rather than line (singular). This means that although your loop continues when the line contains "exited" you're still accessing the first element of lines (which may be one of the ones that contains "exited") in any case. I think that you meant line rather than lines[0] here. You're assuming that lines has at least one element. Otherwise lines[0] would give IndexError. This won't raise IndexError since the line of code "file = ..." is only executed inside the body of the for loop which means that if lines is empty then execution doesn't reach this point. I don't think that that was your intention though as really it should be line rather than lines[0]. You're then assuming that lines[0].split() (which should really be line.split())) has at least 10 elements since you ask for lines[0].split()[9]. This will raise IndexError if .split() returnd fewer than 10 substrings. This is most likely the IndexError that you get. Your incorrect use of line rather than lines[0] means you're reading one of the lines that contains "exited" and so when you call .split() on that it gives fewer than 10 elements and so the last index in lines[0].split()[9] raises IndexError. > break > print file Here you're assuming that lines contains at least one string that does not contain the substring "exited". Otherwise this line will leas to a NameError since the name file is not bound to anything unless the "file=" line is executed. > return file > > def main(): > functions = [check_file] > for func in functions: > try: > func() > except Exception as e: > return False Here you've crippled Python's ability to give quite useful error messages. Replace the above with: def main(): check_file() and then Python will print a helpful error message. More than that if you learn to use a debugger you can hook into the exact moment where an *uncaught* error is raised. Since you catch the error that won't be possible. The traceback that Python prints *if you don't catch the error* contains useful information about the problem. Even if you don't understand that information other people do so if you post it here then you can get much better help. It shows the line at which the error occurred and has more description than simply IndexError. If you remove the try/except you can then use pdb. Just rerun your code as $ python -m pdb myscript.py Type "c" (and hit enter) to "continue". This will run your script right up to the point of the uncaught exception and then hook you into a debugger at the moment the exception was raised. You can then use "l" to show the surrounding code. Use "p file" to show the value of for example the file variable if that seems to be the problem. -- Oscar -- https://mail.python.org/mailman/listinfo/python-list