Not the question you asked, but instead of with-output-to-string, if you're
discarding the output, you might prefer:

(parameterize ([current-output-port (open-output-nowhere)])
  ...)


-Philip

On Thu, Jan 19, 2017 at 4:51 PM, Philip McGrath <[email protected]>
wrote:

> I haven't looked in detail, but two quick thoughts:
>
>    - When I evaluate (find-system-path 'run-file) in Dr. Racket, either
>    inside a module or in the REPL, I get #<path:/Applications/Racket
>    v6.7/DrRacket.app/Contents/MacOS/DrRacket>
>    - Have you looked at (current-directory)? In Dr. Racket, if the file
>    has been saved, that returns the path to the directory of the file being
>    run, which might give you what you need. (Of course, if you manipulate
>    current-directory, or run the program from the shell when your working
>    directory is not the directory of the file being run, you will get
>    different results.)
>    - Greg Hendershott's "__FILE__ and __LINE__ in Racket" might be
>    relevant, though I don't think it does exactly what you want (
>    http://www.greghendershott.com/2014/06/-file-and-line-in-racket.html
>    <http://www.greghendershott.com/2014/06/-file-and-line-in-racket.html>)
>
>
> -Philip
>
> On Thu, Jan 19, 2017 at 4:36 PM, David Storrs <[email protected]>
> wrote:
>
>> For the record, I know I can pass an absolute path (defined with
>> define-runtime-path) to load-initial-data.  My question is more about
>> "why is this different between the shell and Dr Racket?"
>>
>> On Thu, Jan 19, 2017 at 5:23 PM, David Storrs <[email protected]>
>> wrote:
>> > define-runtime-path is based on the enclosing file, not the running
>> file.
>> >
>> >
>> >
>> > ;; file:  app/lib/db/initial_test_data.sql
>> > ...various SQL commands...
>> >
>> >
>> > ;; file:  app/lib/t/testing_utils.rkt
>> > (define-runtime-path thisdir ".")
>> > (define cmd (string-append "psql -d biomantica < "
>> >                              (path->string (build-path thisdir where))))
>> >   (say "shelling out in order to load initial data into DB. Command
>> > is: \n\t" cmd)
>> >   (system cmd)
>> > )
>> >
>> >
>> > ;;  file:  app/test_1.rkt
>> > (require "lib/t/testing_utils.rkt")
>> > (load-initial-data "lib/db/initial_test_data.sql")
>> >
>> >
>> > ;;  file:  app/lib/db/test_2.rkt
>> > (require "../t/testing_utils.rkt")
>> > (load-initial-data "./initial_test_data.sql")
>> >
>> >
>> > $ ./test_1.rkt
>> > shelling out in order to load initial data into DB. Command is:
>> >     psql -d biomantica < ./lib/db/initial_test_data.sql
>> > INSERT 0 0
>> > ...lots of other SQL results...
>> >
>> > $  ./lib/db/test_2.rkt
>> > shelling out in order to load initial data into DB. Command is:
>> >     psql -d biomantica < ././initial_test_data.sql
>> > /bin/sh: ././initial_test_data.sql: No such file or directory
>> > #f
>> >
>> >
>> > Note that both test_N.rkt files worked when I used the prior version.
>> >
>> > On Thu, Jan 19, 2017 at 12:52 PM, Robby Findler
>> > <[email protected]> wrote:
>> >> define-runtime-path is designed for this problem, IIUC. Let me know if
>> >> the docs don't help.
>> >>
>> >> Robby
>> >>
>> >> On Thu, Jan 19, 2017 at 11:47 AM, David Storrs <[email protected]>
>> wrote:
>> >>> Short form:  When using Dr Racket, how do I write something that says
>> >>> "Here is a path to a file that I care about.  The path is relative to
>> >>> you, the script that is running the code" ?
>> >>>
>> >>> Long form:
>> >>>
>> >>> I have a file, testing_utils.rkt, that includes the following snippet
>> of code:
>> >>>
>> >>> (define (load-initial-data where)
>> >>>   (define cmd (string-append "psql -d biomantica < "
>> >>>                              (path->string
>> >>>                               (path-only
>> >>>                                (path->complete-path
>> >>>                                 (find-system-path 'run-file))))
>> >>>                              where))
>> >>>   (say "shelling out in order to load initial data into DB. Command
>> >>> is: \n\t" cmd)
>> >>>
>> >>>   (void
>> >>>    (with-output-to-string  ;; silence the output
>> >>>      (thunk
>> >>>       (system cmd)))))
>> >>>
>> >>>
>> >>> The way this gets used is that one of our test scripts (e.g.
>> >>> 'endpoints.t') will (require "path/to/testing_utils.rkt") and then
>> >>> call the load-initial-data function as follows:
>> >>>
>> >>> (load-initial-data "../initial_test_data.sql")
>> >>>
>> >>> I operate in Emacs via the shell, while my cofounder James uses Dr
>> >>> Racket.  The above sequence works for me but not for him.  When I run
>> >>> endpoints.t it locates the endpoints.t file, generates the path from
>> >>> there to the initial_test_data.sql file, and shells out to run that
>> >>> SQL through psql in order to load the database for testing.  When
>> >>> James tries it it fails.
>> >>>
>> >>> The failure seems to be that for me "the running script" is the
>> >>> endpoints.t file, while for him it's the Dr Racket executable.  I'm
>> >>> not sure where to even begin sorting this out, so I was hoping for
>> >>> some help.
>> >>>
>> >>> Any thoughts?
>> >>>
>> >>> Dave
>> >>>
>> >>>
>> >>> PS:  James had to step out for something else or he would be sending
>> >>> this himself.
>> >>>
>> >>> --
>> >>> You received this message because you are subscribed to the Google
>> Groups "Racket Users" group.
>> >>> To unsubscribe from this group and stop receiving emails from it,
>> send an email to [email protected].
>> >>> For more options, visit https://groups.google.com/d/optout.
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google
>> Groups "Racket Users" group.
>> >> To unsubscribe from this group and stop receiving emails from it, send
>> an email to [email protected].
>> >> For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to