Unable to print python array in shell script loop.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Unable to print python array in shell script loop.
# 1  
Old 08-08-2019
Unable to print python array in shell script loop.

I am unable to loop print a python string array in my unix shell script:

Code:
~/readarr.sh '{{ myarr }}'

more readarr.sh

echo "Parameter 1:"$1
MYARRAY= $1
IFS=
MYARRAY=`python <<< "print ' '.join($MYARRAY)"`

for a in "$MYARRAY"; do
  echo "Printing Array: $a"
done

Quote:
Current Output:
Parameter 1: [u/tmp/file.js, u/var/test.txt, u/tmp/llo.rft]
Quote:
Expected Output:
Parameter 1: [u/tmp/file.js, u/var/test.txt, u/tmp/llo.rft]
Printing Array: /tmp/file.js
Printing Array: /var/test.txt
Printing Array: /tmp/llo.rft
Can you suggest what is the issue with my code ?

I wish to run the shell script on IBM AIX machine non-bash shell.
# 2  
Old 08-08-2019
start with:
Code:
echo "Parameter 1:"$1
MYARRAY=($1)
IFS=
MYARRAY=`python <<< "print ''.join( \"${MYARRAY}\" )"`

for a in "${MYARRAY[@]}"; do
   echo "Printing Array: $a"
done

This User Gave Thanks to rdrtx1 For This Post:
# 3  
Old 08-08-2019
Quote:
Originally Posted by mohtashims

Can you suggest what is the issue with my code ?

I wish to run the shell script on IBM AIX machine non-bash shell.
But you are demonstrating bash constructs, particularly the string redirection, <<<.


You also need to quote each element of the python array:
Code:
$ python <<< "print ' '.join(['u/tmp/file.js', 'u/var/test.txt', 'u/tmp/llo.rft'])"
u/tmp/file.js u/var/test.txt u/tmp/llo.rft

Do you really need to pass this python-style array into your script? Can you pass just a comma-delimited string?
Alternatively:
Code:
printf "Parameter 1: %s\n" "$1"
MYARRAY=`echo "$1" | sed 's/^\[//;s\]$//'`
oldIFS="$IFS"
IFS=,
for a in $MYARRAY
do printf "Printing Array: %s\n" "$a"
done
IFS="$oldIFS"

Assuming AIX has the printf utility.


Andrew
# 4  
Old 08-08-2019
Quote:
Originally Posted by apmcd47
But you are demonstrating bash constructs, particularly the string redirection, <<<.


You also need to quote each element of the python array:
Code:
$ python <<< "print ' '.join(['u/tmp/file.js', 'u/var/test.txt', 'u/tmp/llo.rft'])"
u/tmp/file.js u/var/test.txt u/tmp/llo.rft

Do you really need to pass this python-style array into your script? Can you pass just a comma-delimited string?
@Andrew unfortunately the python string array is what is constructed by Ansible's loop / with _items by defaults and then it has to be passed to the shell script for processing.

I do not know if there is an easy way to convert the python string array to something else that suits our requirement inside of the ansible YML.
# 5  
Old 08-09-2019
Quote:
Originally Posted by rdrtx1
start with:
Code:
echo "Parameter 1:"$1
MYARRAY=($1)
IFS=
MYARRAY=`python <<< "print ''.join( \"${MYARRAY}\" )"`

for a in "${MYARRAY[@]}"; do
   echo "Printing Array: $a"
done

This suggestion does not work.

Below is the incorrect output recieved with this code:

Quote:
Printing Array: [u/tmp/file.js,
Printing Array: u/var/test.txt,
Printing Array: u/tmp/llo.rft]
# 6  
Old 08-09-2019
Quote:
Originally Posted by mohtashims
This suggestion does not work. .....
Why not run the loop in python instead of putting the script in a "shell script" loop?

My guest is that the python script is already written and you want a "wrapper" to run the python script in a loop.

Maybe I am wrong?

Why not copy the python script and modify the original script do perform as you wish?
# 7  
Old 08-09-2019
Quote:
Originally Posted by apmcd47
But you are demonstrating bash constructs, particularly the string redirection, <<<.


You also need to quote each element of the python array:
Code:
$ python <<< "print ' '.join(['u/tmp/file.js', 'u/var/test.txt', 'u/tmp/llo.rft'])"
u/tmp/file.js u/var/test.txt u/tmp/llo.rft

Do you really need to pass this python-style array into your script? Can you pass just a comma-delimited string?
Alternatively:
Code:
printf "Parameter 1: %s\n" "$1"
MYARRAY=`echo "$1" | sed 's/^\[//;s\]$//'`
oldIFS="$IFS"
IFS=,
for a in $MYARRAY
do printf "Printing Array: %s\n" "$a"
done
IFS="$oldIFS"

Assuming AIX has the printf utility.


Andrew
The suggestion does not work and does not print anything.

As far as putting single quotes around parameters fine however, the appended 'u' is put by ansible's python array and we do not have control over it. Hence, with single quotes our array will not look as you shared but look something like below:

Quote:
[u'/tmp/file.js', u'/var/test.txt', u'/tmp/llo.rft']
Please suggest.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Trying to loop through folders and execute an existing python script.

I am trying to loop through lots and lots of folders and use the names of the folders to run a Python script which has parameters. E.g. -- setup_refs -n John -f England/London/Hackney/John -c con/con.cnf Normally to run `setup_refs` once from command line it's: `python setup_refs.py -n John... (3 Replies)
Discussion started by: Mr_Keystrokes
3 Replies

2. Shell Programming and Scripting

Shell script to loop and store in array

I'm trying to achieve the follwoinig with no luck. Find the directories that are greater than 50GB in size and pick the owner of the directory as I would like to send an alert notification. du -sh * | sort -rh 139G Dir_1 84G Dir_2 15G Dir_3 ls -l Dir_1 drwx------ 2... (3 Replies)
Discussion started by: 308002184
3 Replies

3. Shell Programming and Scripting

**python** unable to read the background color in python

I am working on requirement on spreadsheet in python scripting. I have a spreadsheet containing cell values and with background color. I am able to read the value value but unable to get the background color of that particular cell. Actually my requirement is to read the cell value along... (1 Reply)
Discussion started by: giridhar276
1 Replies

4. Shell Programming and Scripting

Unable to store "python --version" to a shell variable

Hi All, I need to get the version of python installed and store it in a variable for later use. Whereas it is printing on the console instead of storing to variable. I am able to store output of ls command in a variable. Please check the below code : root@myhost:/volumes/srini# cat... (4 Replies)
Discussion started by: srinivasan.neel
4 Replies

5. UNIX for Dummies Questions & Answers

Pass array to shell and print

How do i pass an array from test4.sh to a function in another shell script test5.sh, basically i am sourcing the test5.sh in test4.sh and printing the contents, but not working below are my trial scripts, please help, thank you. #!/bin/bash # /usr/local/dw/archive/test5.sh print_array() {... (5 Replies)
Discussion started by: Ariean
5 Replies

6. Shell Programming and Scripting

Unable to pass shell script variable to awk command in same shell script

I have a shell script (.sh) and I want to pass a parameter value to the awk command but I am getting exception, please assist. diff=$1$2.diff id=$2 new=new_$diff echo "My id is $1" echo "I want to sync for user account $id" ##awk command I am using is as below cat $diff | awk... (2 Replies)
Discussion started by: Ashunayak
2 Replies

7. Shell Programming and Scripting

awk loop using array:wish to store array values from loop for use outside loop

Here's my code: awk -F '' 'NR==FNR { if (/time/ && $5>10) A=$2" "$3":"$4":"($5-01) else if (/time/ && $5<01) A=$2" "$3":"$4-01":"(59-$5) else if (/time/ && $5<=10) A=$2" "$3":"$4":0"($5-01) else if (/close/) { B=0 n1=n2; ... (2 Replies)
Discussion started by: klane
2 Replies

8. Shell Programming and Scripting

[Solved] Unable to call a python script from bash

Hi, I am trying to run a python script embedded in bash script. But is throwing me an error. Please help. Script: #!/bin/bash nohup /usr/bin/python /opt/web/http.py & Error: /usr/bin/python: can't open file '/opt/web/http.py': No such file or directory Please help me on this. (6 Replies)
Discussion started by: maddy26615
6 Replies

9. Shell Programming and Scripting

Unable to print dynamic arguments in for loop

Hi All, I want to pass few dynamic arguments to shell script. The number of arguments differ each time I call the script. I want to print the arguments using the for loop as below. But not working out. for (( i=1; i<=$#; i++ )) do echo $"($i)" done /bin/sh test.sh arg1 arg2 arg3 ... (1 Reply)
Discussion started by: laalesh
1 Replies

10. Shell Programming and Scripting

loop in array in python

Hi suppose in python I have a list(or array, or tuple, not sure the difference) How do I loop inside the size of array. The pseudo code is: a= for i = 1 to dim(a) print a end How to find the dimension in python? Also, anyone has a handbook to suggest so I can borrow from library (1 Reply)
Discussion started by: grossgermany
1 Replies
Login or Register to Ask a Question