Relative Path to File with File Sink/Source

Easy question here. I’m trying to use a relative path with file
sink/source. It errors out with “can’t open file”.

I’m assuming the path is relative to the location of the .grc file

If the location of the .grc file was: /home/user1/proj1/devel/myfile.grc
And a data file was here: /home/user1/proj1/dat/datafile.dat
Then the path I use in file source is: …/dat/datafile.dat

What do I need to change to make this work?


You’re probably not running the script from where the .py is, but from
where GRC started. Relative paths are relative to that folder.
That means that if you run gnuradio-companion from your home directory
(which is probably the default when you just open it from some menu),
then paths are relative to /home/user1.


Hmmm. That means I have to specify the directory users must start grc
to keep from erroring out?


On Mon, Mar 16, 2015 at 10:59 AM, Marcus Müller
[email protected]

On 03/16/2015 02:10 PM, Richard B. wrote:

Hmmm. That means I have to specify the directory users must start grc
from to keep from erroring out?

This a very generic Linux thing. Nothing to do with GRC or Gnu Radio
specifically. When you hand the operating system a relative path, it is
interpreted in the context of the current directory. That is
uniformly true.

If that “doesn’t work for you”, you can always come up with a little
wrapper script that places your user process in the desired directory
starting the actual thing you’re wanting to run.

The problem I have with absolute paths, is that I use Git, and when I
a repo to a new computer, with different user names and directory
structures, all the existing absolute paths will be broken. The only
I can ensure is the structure of the Git repo will be the same.

Thanks for clearing that up. I understand what I have to do now.


On Mon, Mar 16, 2015 at 11:42 AM, Marcus Müller
[email protected]

Generally, you’d expect that someone with a file sink/source would
either use absolute paths to ensure there’s no ambiguity, or would like
to see the paths behave relative to the current working directory of the
process, which is what I’d expect from a unix program.

However, you can add an import block; “import
os\nos.chdir(/the/right/directory)”, but that would have exactly the
same effect as just specifying absolute paths.